jQuery HTML到JSON,包括href属性

jQuery HTML到JSON,包括href属性,jquery,html,json,Jquery,Html,Json,我在标记中有如下数据: <p class="bbook">Lorem</p> <p class="bref"> <a class="ref" href="prin.v.ii.ii.html">2:15</a> <a class="ref" href="prin.v.i.v.html">3:17-19</a> <a class="ref" href="prin.v.v.h

我在标记中有如下数据:

  <p class="bbook">Lorem</p>
  <p class="bref">
     <a class="ref" href="prin.v.ii.ii.html">2:15</a>
     <a class="ref" href="prin.v.i.v.html">3:17-19</a>
     <a class="ref" href="prin.v.v.html">3:19 </a>
  </p>

 <p class="bbook">Ipsum</p>
 <p class="bref">
     <a class="ref" href="sec.vii.xxii.html">10:18</a>
     <a class="ref" href="sec.vii.ix.html">10:27</a>
     <a class="ref" href="sec.vii.xxiii.html">10:28</a>
 </p>
{
    "Lorem": {
        "prin.v.ii.ii.html": "2:15",
        "prin.v.i.v.html": "3:17-19",
        "prin.v.v.html": "3:19"
    },
    "Ipsum": {
        "sec.vii.xxii.html": "10:18",
        "sec.vii.ix.html": "10:27",
        "sec.vii.xxiii.html": "10:28"
    }
}
我在这里看到了一些HTML到JSON的解决方案,但我找不到任何处理属性的解决方案。我知道如果标记有
ul
,可能会更容易,但它没有。如何转换它?

使用jQuery框架中的$.parseJSON()和$.each()。这里有一个例子:

$(document).ready(function () {
    var jsonp = '[{"Lang":"jQuery","ID":"1"},{"Lang":"C#","ID":"2"}]';
    var lang = '';
    var obj = $.parseJSON(jsonp);
    $.each(obj, function () {
        lang += this['Lang'] + "<br/>";
    });
    $('span').html(lang);
});​
$(文档).ready(函数(){
var jsonp='[{“Lang”:“jQuery”,“ID”:“1”},{“Lang”:“C#”,“ID”:“2”}];
var lang='';
var obj=$.parseJSON(jsonp);
$。每个(对象、函数(){
lang+=这个['lang']+“
”; }); $('span').html(lang); });​

我想你应该看看

启动一个Python脚本,将html提供给soup,您应该能够在字典中获取任何您想要的内容,并在最后使用json.dumps()获取json

# import/install bs4, json (already included)
end_json = {}

soup = BeautifulSoup(html_string)
books = soup.findAll('p', class='bbook')
for book in books:
    # etc, etc

编辑:我不知道我怎么会错过问题标题中的JQuery,但是BS4太棒了。

我想这很容易。下面是jQuery风格的Javascript中的一些示例代码,但您可以根据自己选择的语言中的DOM traverser和JSON库进行调整。(例如,在Perl中,您将使用HTML::TreeBuilder和JSON模块。)

此时,
json\u result
包含一个json字符串,其内容与您在问题中描述的内容相匹配。

使用两个循环遍历dom。

$(document).ready(function() {
    var O = {}, el, key, a;
    $('.bbook').each(function(index, value) {
        el = $(value);
        key = el.text();
        O[key] = {};
        el.next().find('a').each(function(i, v) {
            a = $(v);
            O[key][a.attr('href')] = a.text();
        });
    });

    console.log(JSON.stringify(O));
});

你确定这就是你想发布此代码的问题吗?它根本没有回答问题。你是对的,问题是在另一个意义上。。。感谢you@Musa谢谢你!我忘了使用
var
来正确地定义变量的范围,如果你没有链接你的小提琴,我就不会发现错误。
var result = {};
$('.bbook').each(function(a,b){
    var $this = $(b);
    result[$this.text()] = {};
    $this.next().find('a').each(function(k,v){
        var item = $(v);
        result[$this.text()][item.attr('href')] = item.text();
    });
});

$('body').append(JSON.stringify(result));
$(document).ready(function() {
    var O = {}, el, key, a;
    $('.bbook').each(function(index, value) {
        el = $(value);
        key = el.text();
        O[key] = {};
        el.next().find('a').each(function(i, v) {
            a = $(v);
            O[key][a.attr('href')] = a.text();
        });
    });

    console.log(JSON.stringify(O));
});