javascript - 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 += " Data: "
for (val in line.d) {
out += val + " ";
}
out += "<br>"
}
document.getElementById("iot_data_dump").innerHTML = out;
}
iot_json_function(data1);
</script>
</body>
</html>
解决方案
它不会冻结,它会引发错误:
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 += " 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。
推荐阅读
- python-3.x - 是否可以根据 PostgreSQL 中的输入列生成列
- perl - 如何在现代 perl 中使用伪散列?
- jquery - 试图突出显示活动菜单项
- javascript - 使用 JavaScript,如何使用 .toExponential() 函数,但只使用两位小数(9.99e9,而不是 9.9999e9)
- python - 以 JSON/字典格式输出 API 请求
- php - 如何将密钥添加到 php 数组作为动态编程
- java - 绘制方法重复 3 次而不是 1 次
- forms - 如何用andt形式取消焦点()
- go - db.FirstOrCreate 和 db.Where().FirstOrCreate() 有何不同?
- spring-boot - 部署到 Tomcat 时 SpringFox 上下文路径重复