[英]How to extract data from json nested objects?
我有下面的JSON文件,我想提取placeName的值,即“ Ince Minaret Medrese”和“ Karatay,Konya”,以及lat和long的值分別為37.8728和32.49,對於“ Karatay,Konya”,lat的值為37.8667和long的值是32.5289
{
"head": {
"link": [],
"vars": ["placeName", "lat", "long"]
},
"results": {
"distinct": false,
"ordered": true,
"bindings": [{
"placeName": {
"type": "literal",
"xml:lang": "en",
"value": "Ince Minaret Medrese"
},
"lat": {
"type": "typed-literal",
"datatype": "http://www.w3.org/2001/XMLSchema#float",
"value": "37.8728"
},
"long": {
"type": "typed-literal",
"datatype": "http://www.w3.org/2001/XMLSchema#float",
"value": "32.49"
}
},
{
"placeName": {
"type": "literal",
"xml:lang": "en",
"value": "Karatay, Konya"
},
"lat": {
"type": "typed-literal",
"datatype": "http://www.w3.org/2001/XMLSchema#float",
"value": "37.8667"
},
"long": {
"type": "typed-literal",
"datatype": "http://www.w3.org/2001/XMLSchema#float",
"value": "32.5289"
}
}
]
}
}
我試圖這樣做
<p id="demo"></p>
<script>
var obj = {
"head": {
"link": [],
"vars": ["placeName", "lat", "long"]
},
"results": {
"distinct": false,
"ordered": true,
"bindings": [{
"placeName": {
"type": "literal",
"xml:lang": "en",
"value": "Ince Minaret Medrese"
},
"lat": {
"type": "typed-literal",
"datatype": "http://www.w3.org/2001/XMLSchema#float",
"value": "37.8728"
},
"long": {
"type": "typed-literal",
"datatype": "http://www.w3.org/2001/XMLSchema#float",
"value": "32.49"
}
},
{
"placeName": {
"type": "literal",
"xml:lang": "en",
"value": "Karatay, Konya"
},
"lat": {
"type": "typed-literal",
"datatype": "http://www.w3.org/2001/XMLSchema#float",
"value": "37.8667"
},
"long": {
"type": "typed-literal",
"datatype": "http://www.w3.org/2001/XMLSchema#float",
"value": "32.5289"
}
}
]
}
}
;
var myJSON = JSON.parse(obj);
document.getElementById("demo").innerHTML = myJSON.results.bindings[0].placeName.value;
</script>
但沒有任何結果,我應該如何從嵌套對象中提取數據?
分別:
obj ['results'] ['bindings'] [0] ['placeName'] ['value']
obj ['results'] ['bindings'] [1] ['placeName'] ['value']
obj ['results'] ['bindings'] [1] ['lat'] ['value']
obj ['results'] ['bindings'] [1] ['long'] ['value']
obj ['results'] ['bindings'] [0] ['lat'] ['value']
obj ['results'] ['bindings'] [0] ['long'] ['value']
您也可以使用點表示法(例如obj.results.bindings [1] .long.value),如果在訪問索引之前先知道索引,則建議使用該符號。
僅供參考:您不需要解析對象,因為它已經是JSON。
var obj = { "head": { "link": [], "vars": ["placeName", "lat", "long"] }, "results": { "distinct": false, "ordered": true, "bindings": [{ "placeName": { "type": "literal", "xml:lang": "en", "value": "Ince Minaret Medrese" }, "lat": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "37.8728" }, "long": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "32.49" } }, { "placeName": { "type": "literal", "xml:lang": "en", "value": "Karatay, Konya" }, "lat": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "37.8667" }, "long": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "32.5289" } } ] } }; console.log(obj['results']['bindings'][0]['placeName']['value'], obj['results']['bindings'][1]['placeName']['value'], obj['results']['bindings'][1]['lat']['value'], obj['results']['bindings'][1]['long']['value'], obj['results']['bindings'][0]['lat']['value'], obj['results']['bindings'][0]['long']['value']);
您的代碼實際上是正確的,只需刪除JSON.parse()
因為您傳遞給parse方法的參數不是json字符串,而是一個實際對象
因此,請按照以下方式進行操作。
var myJSON = obj;
它將開始工作。
您可以使用過濾器
var result = data.results.bindings.filter(function( obj ) {
return obj.placeName.value == "Ince Minaret Medrese";
});
請參閱Array.prototype.filter()上的MDN文檔
var data = { "head": { "link": [], "vars": ["placeName", "lat", "long"] }, "results": { "distinct": false, "ordered": true, "bindings": [{ "placeName": { "type": "literal", "xml:lang": "en", "value": "Ince Minaret Medrese" }, "lat": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "37.8728" }, "long": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "32.49" } }, { "placeName": { "type": "literal", "xml:lang": "en", "value": "Karatay, Konya" }, "lat": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "37.8667" }, "long": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "32.5289" } } ] } }; var result = data.results.bindings.filter(function( obj ) { return obj.placeName.value == "Ince Minaret Medrese"; }); console.log(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.