【问题标题】:Iterate JSON give characters, not elements迭代 JSON 给出字符,而不是元素
【发布时间】:2019-02-13 16:12:53
【问题描述】:

我正在使用 .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) 它会遍历数组中的每个字符。

一切都指向它没有将其视为一个数组,但 [] 在那里。

【问题讨论】:

    标签: javascript jquery json


    【解决方案1】:

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

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

    data = JSON.parse(data)

    【讨论】:

    • 这行得通。既然它已经是 JSON 格式,为什么还需要它呢?
    • 从问题看来,数据是字符串格式,所以你必须解析它
    • 作为Oleksandr has already written。如果返回的内容类型表明响应是 JSON,jQuery 会自动解析响应。如果 jQuery 不解析响应,那么您发送的内容类型错误。
    【解决方案2】:

    看起来您的 data 包含一个 json 字符串而不是一个数组。如上所述,您可以使用JSON.parse 对其进行解析。但您的 API 响应似乎包含无效的内容类型,这就是 getJSON 不自行解析响应的原因。

    【讨论】:

    • 谢谢。即使看起来正确,api 也没有返回正确编码的信息。一旦解决了这个问题,就不需要 parse 语句了。
    • 哦。所以我对内容类型的说法并不是 100% 正确。您能否更详细地描述无效编码?我很好奇到底出了什么问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 2015-11-23
    • 2019-05-31
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多