簡體   English   中英

如何從json嵌套對象中提取數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM