我尝试使用Javascript解析JSON,但无法访问第一个PWER对象上568部分的值(此值发生变化,我只想在页面上显示)。 ' 1452520496000' 部分也会根据时间更改值。我是javascript和JSON的新手,我在研究中看到的例子往往比这更简单,例如访问" cid" :" 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}
]
我已经调整了示例here中的代码作为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:&#34; PWER&#34;,数据:数组1,sid:&#34; 144&#34;,单位:&#34; kWm&#34;,年龄: 5}
这表明它正在设法使用令牌访问API并提取数据。
我想访问&#39; Array1&#39;在&#39;数据&#39;所以我检查一下它包含的内容:
console.log(arr[0].data);
[对象]
0:对象
长度:1
__ proto __:Array [0]
我接下来尝试访问索引中的0对象:
console.log(arr[0].data[0]);
对象{1452520496000:568}
我想要的568值是存在但我无法访问它,1452520496000部分永远在变化。如何才能获得访问权限?
答案 0 :(得分:0)
因此,您必须使用Object.keys(object)
来获取您之后的密钥
var data = arr[0].data[0];
var keys = Object.keys(data);
console.log(keys[0], data[keys[0]]);
答案 1 :(得分:0)
var obj = arr[0].data[0];
console.log(obj[ Object.keys( obj )[ 0 ] ] );
使用obj
将Object.keys()
内的所有密钥放入一个数组中,然后从中获取第一个索引(第一个密钥名称)。
答案 2 :(得分:0)
JSON适用于键值对公式。您使用的对象不适合JSON格式。
"data":[{"1452520496000":568}],
您可以使用以下两种格式的上述数据:
"data":[ "1452520496000", "568"],
"data":{"key1":"1452520496000", "key2" : "568"},
如果你想使用相同的格式,那么我找到了解析你的JSON的方法
var d= 'your json';
var parsedObjects = $.parseJSON(JSON.stringify(d));
Stringify json然后解析。
答案 3 :(得分:0)
var data = arr[0].data[0];
var out;
for (var key in data) {
out = data[key];
}
请注意,如果该“数据”对象中存在其他键,则必须在分配“out”之前添加一些错误检查。例如。如果你有这个:
{
...
data: [{ "foo": "someval", "1452520496000": 568, "bar": "someotherval" }]
...然后你需要在循环中做一些验证来验证当前密钥是否正确。一旦你找到了正确的钥匙,我就会打破。