簡體   English   中英

在Javascript中解析JSON時訪問高度嵌套的數組

[英]Accessing heavily nested array when parsing JSON in Javascript

我正在嘗試使用Javascript解析JSON,但是在訪問第一個PWER對象上的568部分的值時遇到了麻煩(此值發生更改,我只想在頁面上顯示它)。 “ 1452520496000”部分還根據時間更改值。 我是javascript和JSON的新手,我在研究中看到的示例往往比這更簡單,例如可以執行“ cid”:“ PWER”中的PWER。

這是API的JSON輸出示例:

[
{"cid":"PWER",
 "data":[{"1452520496000":568}],  
 "sid":"144",
 "units":"kWm",
 "age":5
 },

{"cid":"MOTN",
 "data":[{"1452520489000":0}],
 "sid":"910",
 "units":"S",
 "age":12
 },

{"cid":"LGHT",
 "data":[{"1452520489000":19.09}],
 "sid":"910",
 "units":"L",
 "age":12}
 ]

我在這里示例中修改了代碼,將其作為HTTP GET請求的框架,同時我研究了如何解析它。 這是我到目前為止的內容:

  <div id="main"></div>

  <script>
  var xmlhttp = new XMLHttpRequest();
  var url = "URLGoesHere";

  xmlhttp.onreadystatechange=function() {
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
          myFunction(xmlhttp.responseText);
      }
  }
  xmlhttp.open("GET", url, true);
  xmlhttp.send();

  function myFunction(response) {
      var arr = JSON.parse(response);

      var out = arr[0].data[0];

      document.getElementById("main").innerHTML = out;
  }
  </script>

問題是,這僅在我的頁面上顯示[object Object]

我一直在嘗試使用控制台進行調試:

console.log(arr[0]);

對象{cid:“ PWER”,數據:陣列1 ,sid:“ 144”,單位:“ kWm”,年齡:5}

這表明它正在設法使用令牌訪問數據並提取數據。

我想訪問“數據”中的“ Array1”,所以我檢查一下包含的內容:

console.log(arr[0].data);

[賓語]
0:對象
長度:1
__原始__:數組[0]

接下來,我嘗試訪問索引中為0的對象:

console.log(arr[0].data[0]);

對象{1452520496000:568}

我想要的568值在那里,但我無法訪問它,1452520496000部分一直在變化。 最好的訪問方式是什么?

因此,您將必須使用Object.keys(object)來獲取所需的密鑰

var data = arr[0].data[0];
var keys = Object.keys(data);
console.log(keys[0], data[keys[0]]);
var obj = arr[0].data[0];

console.log(obj[ Object.keys( obj )[ 0 ] ] );

使用Object.keys()obj所有鍵獲取到數組中,然后從中獲取第一個索引(第一個鍵名)。

JSON適用於鍵值對公式。 您使用的對象不適合JSON格式。

"data":[{"1452520496000":568}],  

您可以使用以下兩種格式的上述數據:

  1. 在數組"data":[ "1452520496000", "568"],同時使用"data":[ "1452520496000", "568"],
  2. 使用一些鍵"data":{"key1":"1452520496000", "key2" : "568"},

如果您想使用相同的格式,那么我找到了一種解析JSON的方法

var d= 'your json';
var parsedObjects = $.parseJSON(JSON.stringify(d));

字符串化json,然后解析。

epascarello有一個很好的答案。 一種替代方法是在“數據”中的POJO中進行簡單循環。 一個簡單的for循環示例(盡管您可以使用其他性能更高的循環):

var data = arr[0].data[0];
var out;
for (var key in data) {
    out = data[key];
}

請注意,如果該“數據”對象中還存在其他鍵,則必須在分配“輸出”之前添加一些錯誤檢查。 例如,如果您有:

{
    ...
    data: [{ "foo": "someval", "1452520496000": 568, "bar": "someotherval" }]

...然后,您需要在循環中進行一些驗證,以驗證當前密鑰是否正確。 一旦找到正確的鑰匙,我也會打斷性能。

暫無
暫無

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

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