JSON.parse:JSON数据第1行第50列的JSON数据后出现意外的非空白字符

时间:2018-07-04 11:17:28

标签: php json ajax

当我使用....

 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"}]}

可以帮忙吗?....谢谢

4 个答案:

答案 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);