我正在尝试解析我的页面通过 AJAX 响应获得的 JSON 消息,但是它一直抛出以下错误,我不知道为什么:
“SyntaxError: JSON.parse: JSON 数据的数组元素后应为‘,’或‘]’”
这是我页面的 javascript 的样子:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
var Response = JSON.parse(xhttp.responseText);
}
}
服务器返回的 JSON 如下所示:
{
"Error": "",
"ClientInfo": [{
"ID": 1,
"Name": "Bill"
}, {
"ID": 2,
"Name": "Sally"
}]
}
知道我做错了什么吗? JSON 验证器说它是有效的 JSON....
最佳答案
更新
正是 Error:
键让解析器将其吐出。查看演示。
更新了演示以包含带有 Error:
的 JSON 以比较结果。不幸的是,我不得不注释掉控制台记录了错误
JSON,因为调试器立即发现了脚本错误
。幸运的是,该演示仍然有效,因此您可以在加载后忽略初始错误。
测试 1
- 首先尝试使用
info
按钮。 [结果:莎莉] - 接下来单击
error0
按钮。 [结果:莎莉] - 然后尝试使用
error1
按钮。 [结果:未定义]
所以它似乎解析如果你:
- 删除
错误:“”
或者 - 将
Error: ""
放在数组中。
测试 2
复制 info
JSON 然后验证它。 JSONLint
当你使用 JSONLint 时,你必须剥离它:
{
"ClientInfo": [
{
"ID": 1,
"Name": "Bill"
},
{
"ID": 2,
"Name": "Sally"
}
]
}
现在复制错误
JSON 并验证它。
{
"Error": "",
"ClientInfo": [{
"ID": 1,
"Name": "Bill"
}, {
"ID": 2,
"Name": "Sally"
}]
}
它们都应该有效,但调试器和解析器拒绝 error
JSON。
片段
// Prepare JSON
var info =
'{"ClientInfo": [' +
'{"ID": 1, "Name": "Bill"},' +
'{"ID": 2, "Name": "Sally"} ]}';
var error0 =
'{"ClientInfo": [' +
'{"ID": 1, "Name": "Bill"},' +
'{"ID": 2, "Name": "Sally"},' +
'{"Error": ""} ]}';
var error1 =
'{"Error": ""},' +
'{"ClientInfo": [' +
'{"ID": 1, "Name": "Bill"},' +
'{"ID": 2, "Name": "Sally"} ]}';
// Create a function that parses JSON Object
function JSONObj(json) {
var jsonObj = JSON.parse(json);
return jsonObj;
}
// A function that logs results one at a time so we can compare results
function processLog(result) {
console.log('Result: ' + result);
}
/* Test info and errors */
var lastClient = JSONObj(info).ClientInfo[1].Name;
var errorA = JSONObj(error0).ClientInfo[1].Name;
var errorB = JSONObj(error1).ClientInfo[1].Name;
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
<ol>
<li>Remove this: <pre><code>"Error": "",</code></pre>
</li>
<li>Separate into segments (see script)</li>
<li>Wrap each segment with single quotes `'`</li>
<li>Add a `+` after each segment</li>
</ol>
<button onclick="processLog(lastClient);">info</button>
<button onclick="processLog(errorA);">error0</button>
<button onclick="processLog(errorB);">error1</button>
关于javascript - AJAX/JavaScript : parsing JSON that contains an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36561689/