我有这样的标记数据:
<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
可能会更容易,但事实并非如此。我该怎么转换呢?
答案 0 :(得分: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字符串,其内容与您在问题中描述的内容相匹配。
答案 1 :(得分:2)
使用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);
});
答案 2 :(得分:2)
此链接如何:http://jsfiddle.net/eGRsq/。
answer
已取自此链接Map HTML to JSON
答案 3 :(得分: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很棒。
答案 4 :(得分:1)
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。
答案 5 :(得分: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));
});