2013-07-18 54 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)); 
});