簡體   English   中英

從齊磊訪問JSON對象內部的數組

[英]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”}]}

https://jsfiddle.net/pdorgambide/vphbmtk1/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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