迭代JSON给出字符,而不是元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代JSON给出字符,而不是元素相关的知识,希望对你有一定的参考价值。

我正在使用.getJSON将数据拉入图表。出于某种原因,当我尝试循环遍历JSON数组时,它给了我每个单独的字符,就像它没有看到它作为一个数组,但当我将数据转储到控制台时,它是正确格式化的JSON。

  <!DOCTYPE html>
  <html>
  <head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script>
  $.getJSON("/getgraphdata", function(result) {
      console.log(result.length);                                                                
      testFunction(result);
  });
 </script>
 </head>

 <body>
 <script>
 function testFunction(data) {
     console.log(data); // line 16
     //console.log(data.length); Gives total character count. 
     for(var i = 0; i < data.length; i++) {
         var obj = data[i];

         //console.log(obj.id);
     }
 }


 </script>
 </body>
 </html>

这是直接来自控制台的数据。 (从第16行)

[{"id":"1375857","temperature":"78.98","humidity":"90.2","nodeName":"Bsmt_Front","timestamp":"1536424185"},{"id":"1375856","temperature":"78.98","humidity":"77.1","nodeName":"Bsmt_Back","timestamp":"1536424185"},{"id":"1375855","temperature":"77.54","humidity":"49.9","nodeName":"Living_Room","timestamp":"1536424180"},{"id":"1375854","temperature":"0","humidity":"0","nodeName":"Bsmt_Room","timestamp":"1536424179"},{"id":"1375853","temperature":"79.52","humidity":"82.7","nodeName":"Flow_Tent","timestamp":"1536424158"}]

我在这里用JavaScript loop through json array?评价最高的答案

如果我在第21行注释它显示未定义。如果我执行console.log(obj),它会遍历数组中的每个字符。

一切都指向它没有看到它作为一个数组,但[]在那里。

答案

看起来你的data包含一个json字符串而不是一个数组。如上所述,您可以使用JSON.parse来解析它。但看起来您的API响应的内容类型无效,这就是为什么getJSON本身不解析响应的原因。

另一答案

您可以使用JSON.parse将字符串解析为javascript对象

所以在你的testFunction内你应该这样做

data = JSON.parse(data)

以上是关于迭代JSON给出字符,而不是元素的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Python 'for word in words:' 迭代单个字符而不是单词?

颤振飞镖get.http响应给出html而不是json api

csv.Error:迭代器应该返回字符串,而不是字节

根据字符串名称而不是列表视图项位置替换片段并启动活动

为啥打印 char* 会给出字符串而不是地址? [复制]

为啥 min_element() 返回最小元素的索引,而不是迭代器?