当我使用....
var jsonData = JSON.parse(xhttp.responseText);
我得到一个错误=>“ JSON.parse:JSON数据的第1行第50列的JSON数据后出现意外的非空白字符”
这是我来自php脚本的JSON数据
{"results":[{"oldID":5,"oldMain":"News papers"}]}{"results":[{"oldID":3,"oldMain":"Construction"}]}{"results":[{"oldID":2,"oldMain":"Banking Files"}]}{"results":[{"oldID":1,"oldMain":"Technologies"}]}
可以帮忙吗?....谢谢
答案 0 :(得分:1)
这不是有效的json,必须将其包装在数组中。有效的json就是这样
[{
"results": [{
"oldID": 5,
"oldMain": "News papers"
}]
}, {
"results": [{
"oldID": 3,
"oldMain": "Construction"
}]
}, {
"results": [{
"oldID": 2,
"oldMain": "Banking Files"
}]
}, {
"results": [{
"oldID": 1,
"oldMain": "Technologies"
}]
}]
看看字符串开头和结尾的括号 [] 和 来分割对象。
一些在线json linter here,以检查您的json是否有效。
答案 1 :(得分:1)
JSON无效。如果可能的话,您可以按照以下方式更新JSON
{
"results": [{
"oldID": 5,
"oldMain": "News papers"
}],
"resultss": [{
"oldID": 3,
"oldMain": "Construction"
}]}
而且JSON也不应包含重复的关键元素。您也可以像这样将JSON合并到JSONArray
[{
"results": [{
"oldID": 5,
"oldMain": "News papers"
}]
},
{
"results": [{
"oldID": 3,
"oldMain": "Construction"
}]
}]
答案 2 :(得分:0)
您的代码无效。
您的代码;
{"results":[{"oldID":5,"oldMain":"News papers"}]}{"results":[{"oldID":3,"oldMain":"Construction"}]}{"results":[{"oldID":2,"oldMain":"Banking Files"}]}{"results":[{"oldID":1,"oldMain":"Technologies"}]}
您的代码已通过验证;
[{"results":[{"oldID":5,"oldMain":"News papers"}]},
{"results":[{"oldID":3,"oldMain":"Construction"}]},
{"results":[{"oldID":2,"oldMain":"Banking Files"}]},
{"results":[{"oldID":1,"oldMain":"Technologies"}]}]
问题是您有多个JSON根元素。这些也不以逗号分隔。他们还需要用[]换行,这将把它变成一个对象。如果您不想将响应包装在[]中,则可以返回不带[]的字符串,而是执行此操作;
JSON.parse('['+yourreponse+']') which will parse the JSON correctly.
答案 3 :(得分:0)
以上答案是正确的,即您的 json 语法不正确。更正您的语法将解决问题(如建议的那样)
我的情况有点不同。我正在返回 json 以响应 ajax 调用。 php 使用 if else 构造返回的那些 jsons。我错误地省略了另一个;
if (!empty($_GET['arg1']))
echo getTrainings($filter, 'arg1');
elseif (!empty($_GET['arg2']))
echo getTrainings($filter, 'arg2');
if (empty($_GET['arg3']))
echo getTrainings($filter, 'arg3');
elseif (empty($_GET['arg4']))
echo getTrainings($filter, 'arg4');
所以实际上返回的是两个 json 而不是一个,这导致了 $.parseJSON(result);
var par = $.parseJSON(result);