[英]Accessing an array inside of JSON object from reviver
我有一個格式為{"Foo": ["B","A","R"]}
的JSON
對象
我試圖像這樣訪問數組的值:
var json = '{"Foo": ["B","A","R"]}';
expression = JSON.Parse(json, function(key, value){
if(key == "Foo"){
console.log(value.length); // logs "3"
console.log(value[1]); // logs "undefined"
}
});
如果我要求的值長度返回數組的長度是否正確,但如果我問的價值,它返回undefined
,我不太清楚why.There是其他值JSON
,我能夠訪問就好了,但它們不是數組。 任何見識將不勝感激。 謝謝!
您應該像這樣使用JSON.parse
:
var json = '{"Foo":["B","A","R"]}';
var object = JSON.parse(json);
// object is now and object containing the data from 'json'
var expression = object["Foo"][1]; // object["Foo"] refers to the
// value with key "Foo"
(帶有回調參數調用JSON.parse
是用於轉換JSON對象而不讀取它的高級功能。但是,在幾乎所有情況下,您都希望像上面的代碼一樣使用它,而沒有回調。)
如另一個答案中所述,如果您只想檢索Foo
的第二個元素,則可以在使用標准屬性訪問技術(例如obj.Foo[1]
進行解析之后,輕松地完成此操作。
假設您確實要對JSON.parse
使用可選的第二個“ reviver”參數,則需要從“ reviver”回調中返回值 ;
expression = JSON.Parse(json, function(key, value){
if (key == "Foo"){
console.log(value[1]);
}
return value;
^^^^^^^^^^^^^
});
使用此代碼
var json = {'foo' : ['B', 'A', 'R']};
$.each(json, function(key, value){if(key == 'foo'){console.log(value[1]);}});
您已經有一個json對象,因此無需再次解析它。
似乎無法訪問value [1]但可以訪問value.length的原因是(如user663031所述)您沒有返回值。
Reviver函數將一個值替換為另一個值,如果未指定返回值,則所有函數將返回未定義的值。 Reviver接收值的順序為:首先分別數組中的每個值,然后是數組。
在您的代碼中,每個值已被“ undefined”替換,因此該數組具有三個未定義的值(按長度報告)。 value[1]
確實在返回位置1的值,但將其設置為“ undefined”。
當json字符串具有數組時,將使用索引[Object]作為鍵,值參數調用reviver函數。
在分析階段過濾對象屬性的以下代碼片段將很有幫助:
var json = '{"_embedded": [{"a":"A","b":"B","links": {"c":"C"}},{"a":"A2", "b":"B2","links": {"c":"C2"}}]}';
var schemaNames=["_embedded", "a"];
var result= JSON.parse(json, function(k, v) {
console.log(k,v);
if ("" === k){
return v;
}
// On arrays k is a number
else if (schemaNames.indexOf(k) > -1 || !isNaN(k)){
return v;
}
});
console.log(JSON.stringify(result));
輸出:{“ _embedded”:[{“ a”:“ A”},{“ a”:“ A2”}]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.