[英]JavaScript - creating a comma delimited string from a lookup in a heavily nested array
[英]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}],
您可以使用以下兩種格式的上述數據:
"data":[ "1452520496000", "568"],
同時使用"data":[ "1452520496000", "568"],
"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.