在Javascript

时间:2016-01-11 18:39:56

标签: javascript json api

我尝试使用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部分永远在变化。如何才能获得访问权限?

4 个答案:

答案 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 ] ] );

使用objObject.keys()内的所有密钥放入一个数组中,然后从中获取第一个索引(第一个密钥名称)。

答案 2 :(得分:0)

JSON适用于键值对公式。您使用的对象不适合JSON格式。

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

您可以使用以下两种格式的上述数据:

  1. 在数组"data":[ "1452520496000", "568"],
  2. 中使用两者
  3. 使用一些键"data":{"key1":"1452520496000", "key2" : "568"},
  4. 如果你想使用相同的格式,那么我找到了解析你的JSON的方法

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

    Stringify json然后解析。

答案 3 :(得分:0)

epascarello有一个很好的答案。另一种方法是在“数据”中通过POJO进行简单的循环。一个简单的for循环示例(尽管您可以使用其他更高性能的循环):

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

请注意,如果该“数据”对象中存在其他键,则必须在分配“out”之前添加一些错误检查。例如。如果你有这个:

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

...然后你需要在循环中做一些验证来验证当前密钥是否正确。一旦你找到了正确的钥匙,我就会打破。