2013-07-18 25 views
2

我有数据,类似这样的标记:jQuery的HTML到JSON,包括href属性

<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> 

我想将其转换为一个JSON对象是这样的:

{ 
    "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的可能更容易,但事实并非如此。我怎么能转换这个?

回答

4

很容易地,我应该想到。以下是jQuery风格JavaScript中的一些示例代码,但您可以根据自己选择的语言使用DOM遍历器和JSON库进行调整。 (例如,在Perl中,你会使用HTML :: TreeBuilder作为和JSON模块)。

var json_obj = {}; 
$('p.bbook').each(function(i,el) { 
    var which = $(el).text(); 
    var refs = {}; 
    $(el).next('p.bref').find('a.ref').each(function(i,el) { 
     var href = $(el).attr('href'); 
     var chapter_verse = $(el).text(); 
     refs[href] = chapter_verse; 
    }); 
    json_obj[which] = refs; 
}); 
var json_result = JSON.stringify(json_obj); 

在这一点上,json_result包含一个JSON字符串,其内容与您在您的问题描述。

+2

+1我只是写一个类似的小提琴http://jsfiddle.net/wDYnU/ – Musa

+0

@Musa感谢你!我忘了使用'var'正确地确定变量的范围,并且如果你没有链接你的小提琴,就不会发现错误。 –

2
从jQuery框架

使用$ .parseJSON()和$。每()。这里的为例:

$(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); 
});​ 

+1

你确定这是对你是要发布这个代码的问题采取了?它根本没有回答这个问题。 –

+0

你是对的,问题是在其他sens ...谢谢 –

1

我想你应该看看Beautiful Soup 4

启动一个Python脚本,喂HTML的汤,你应该能够得到任何你想要成为一个字典,并使用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非常棒。

1

http://jsfiddle.net/wDjhJ/

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)); 

导线与一对夫妇循环的DOM。

1

jsFiddle

$(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)); 
});