首页 > 解决方案 > JSON.parse() 永远不会完成

问题描述

任何想法为什么以下 html - 在 JSON.parse(..) 上永远阻塞(我正在尝试解析来自 IoT 服务器 json 的 json 响应似乎有效,但解析被冻结)

<html>
<body>

<div id="iot_data_dump"></div>

<script>

var data1 = {
        "thing": 1000,
        "last": [
        {"t": 1541239266580, "r": 96, "d": [ 138, 47, 188, 0, 0, 18, 0, 0] },
        {"t": 1541236276321, "r": 97, "d": [ 140, 49, 187, 0, 0, 17, 0, 0] },
        {"t": 1541236161222, "r": 98, "d": [ 140, 49, 187, 0, 0, 18, 0, 0] }
        ]
        };

function iot_json_function(data) {
        var json_data = JSON.parse(data);
        var out = "Thing: " + json_data.thing + "<br>";
        for (line in json_data.last) {
          out += "&nsbp;Time: " + line.t + "<br>";
          out += "&nsbp;Signal Strength: " + line.r + "<br>";
          out += "&nbsp;Data: "
          for (val in line.d) {
             out += val + " ";
          }
          out += "<br>"
        }
 document.getElementById("iot_data_dump").innerHTML = out;
}

iot_json_function(data1);

</script>

</body>
</html>

标签: javascripthtmljson

解决方案


它不会冻结,它会引发错误:

SyntaxError:位置 1 处 JSON 中的意外标记 o

例子:

var data1 = {
        "thing": 1000,
        "last": [
        {"t": 1541239266580, "r": 96, "d": [ 138, 47, 188, 0, 0, 18, 0, 0] },
        {"t": 1541236276321, "r": 97, "d": [ 140, 49, 187, 0, 0, 17, 0, 0] },
        {"t": 1541236161222, "r": 98, "d": [ 140, 49, 187, 0, 0, 18, 0, 0] }
        ]
        };

function iot_json_function(data) {
        var json_data = JSON.parse(data);
        var out = "Thing: " + json_data.thing + "<br>";
        for (line in json_data.last) {
          out += "&nsbp;Time: " + line.t + "<br>";
          out += "&nsbp;Signal Strength: " + line.r + "<br>";
          out += "&nbsp;Data: "
          for (val in line.d) {
             out += val + " ";
          }
          out += "<br>"
        }
 document.getElementById("iot_data_dump").innerHTML = out;
}

try {
  iot_json_function(data1);
} catch (e) {
  console.error(e.message);
}

那是因为您没有将 JSON 传递给iot_json_function,而是传递了一个对象。由于它不是 JSON (a string ),JSON.stringify因此尝试将其转换为 string,getting "[object Object]",这不是有效的 JSON,所以它失败了。

JSON 是一种用于数据交换的文本表示法。(这里有更多内容。)如果您正在处理 JavaScript 源代码,而不是处理字符串,那么您就不是在处理 JSON。


推荐阅读