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

Dab*_*ise 7 php ajax json

当我使用....

 var jsonData = JSON.parse(xhttp.responseText);
Run Code Online (Sandbox Code Playgroud)

我收到错误 =>“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"}]}
Run Code Online (Sandbox Code Playgroud)

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

H. *_*M.. 8

虽然有点晚了,但 @igniz87 和 @Benjamin James Kippax 的回答会让你的网站面临安全问题,效仿他们的例子是非常危险的。正如奥瓦斯普所读到的那样,

ALWAYS RETURN JSON WITH AN OBJECT ON THE OUTSIDE
Run Code Online (Sandbox Code Playgroud)

因此,为了成为一个免受黑客野蛮行为的保护层,您需要始终让外部原语成为 JSON 字符串的对象。正如您可以清楚地看到的,上述人们的答案并不遵循这一重要的安全规则。

此外,Owasp 还举了一个例子,表示像下面这样的 JSON 是EXPLOITABLE

[{"object": "inside an array"}]
Run Code Online (Sandbox Code Playgroud)

然而,以下 JSON 不是,

{"object": "not inside an array"}
{"result": [{"object": "inside an array"}]}
Run Code Online (Sandbox Code Playgroud)

您需要删除重复的键元素并按以下方式更改它,这样您将在外部拥有一个对象。

{
"results": [{
    "oldID": 5,
    "oldMain": "News papers"
}],
"resultss": [{
    "oldID": 3,
    "oldMain": "Construction"
}]}
Run Code Online (Sandbox Code Playgroud)

在这里,实际上您应该带上 php 代码,因为问题出在发送 JSON 的 php 代码上。当您想要发送 JSON 时,请尝试创建数据数组。我按照以下方式进行。

        $data = [];
        foreach ($results as $res) {
            $t = [];
            $t['oldID'] = $res['oldID'];
            $t['oldMain'] = $res['oldMain'];
            $data[] = $t;
        }
        echo json_encode(['results' => $data]);
Run Code Online (Sandbox Code Playgroud)

你最好发送你的php代码,这里缺少。我的 php 脚本不包含您的所有代码,但它为您提供了如何执行此操作的想法。


Mos*_*afa 6

过去几年我也遇到过同样的问题。有时问题与无效的 JSON 无关..像我现在一样..问题是我必须在stringify之前使用JSON.parse

var db = JSON.stringify(data);
var db = JSON.parse(db);
Run Code Online (Sandbox Code Playgroud)

有时在php中你必须json_encode($data)正确使用。

有时你的 JSON 无效(在线 JSON 验证器


小智 2

它不是有效的 json,您必须将其包装在数组中。有效的json是这样的

[{
    "results": [{
        "oldID": 5,
        "oldMain": "News papers"
    }]
}, {
    "results": [{
        "oldID": 3,
        "oldMain": "Construction"
    }]
}, {
    "results": [{
        "oldID": 2,
        "oldMain": "Banking Files"
    }]
}, {
    "results": [{
        "oldID": 1,
        "oldMain": "Technologies"
    }]
}]  
Run Code Online (Sandbox Code Playgroud)

查看string 开头和结尾处的方括号[ ]以及用于分割对象的, 。

这是一些在线 json linter,用于检查您的 json 是否有效。