当我使用....
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"}]}
有人可以帮忙吗?...谢谢
聚会有点晚了,但是@igniz87和@Benjamin James Kippax的答案会让你的网站面临安全问题,效仿他们的例子是非常危险的。 正如 Owasp 所读,
ALWAYS RETURN JSON WITH AN OBJECT ON THE OUTSIDE
因此,为了成为一个免受黑客野蛮行为的保护层,您需要始终让外部原语成为 JSON 字符串的对象。正如您可以清楚地看到的,上述人们的答案并不遵循这一关键的安全规则。
Owasp 还举了个例子,说像下面这样的 JSON 就是
EXPLOITABLE
:
[{"object": "inside an array"}]
但是,以下 JSON 不是,
{"object": "not inside an array"}
{"result": [{"object": "inside an array"}]}
您需要删除重复的关键元素并按以下方式更改它,这样您将在外部拥有一个对象。
{
"results": [{
"oldID": 5,
"oldMain": "News papers"
}],
"resultss": [{
"oldID": 3,
"oldMain": "Construction"
}]}
在这里,实际上您应该带上 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]);
你最好发送你的php代码,这里缺少。我的 php 脚本不包含您的所有代码,但它为您提供了如何执行此操作的想法。
过去几年我也遇到过同样的问题。 有时问题与无效的 JSON 无关.. 就像我现在一样.. 问题是我必须在
stringify
之前使用
JSON.parse
var db = JSON.stringify(data);
var db = JSON.parse(db);
有时在 php 中你必须正确使用
json_encode($data)
。
有时你的 JSON 无效(在线 JSON 验证器)
这不是有效的 json,您必须将其包装在数组中。有效的json是这样的
[{
"results": [{
"oldID": 5,
"oldMain": "News papers"
}]
}, {
"results": [{
"oldID": 3,
"oldMain": "Construction"
}]
}, {
"results": [{
"oldID": 2,
"oldMain": "Banking Files"
}]
}, {
"results": [{
"oldID": 1,
"oldMain": "Technologies"
}]
}]
看一下 string 开头和结尾处的括号 [ ] 以及用于分割对象的 ,。
这是一些在线 json linter here 检查您的 json 是否有效。
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"
}]
}]
您的代码无效。
您的代码;
{"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.
以上答案是正确的,即您的 json 语法不正确。纠正你的语法可以解决问题(按照建议)
我的情况有点不同。我返回 json 来响应 ajax 调用。这些 json 由 php 使用 if else 构造返回。我错误地漏掉了另外一个;
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);
我遇到的错误:
我在JS中使用的代码,
const data = {
OutLatitude: '42.12345',
OutLongitude: '-71.54321',
};
const Data = {
location: {
latitude: JSON.parse(data[0].OutLatitude),
longitude: JSON.parse(data[0].OutLongitude),
},
}
这向我显示了错误,Unexpected non-whitespace character after JSON 位于位置 10(第 1 行第 11 列)处 JSON.parse() 处 _callee4$ (VM7 markattendance.bundle:571:48
解决方案:-
我用来解决JS问题的代码,
const restaurantData = {
location: {
latitude: parseFloat(data[0].OutLatitude), // Parse as a floating-point number
longitude: parseFloat(data[0].OutLongitude), // Parse as a floating-point number
},
};
将 Decimal 值转换为 int 显示该错误,通过使用 parseFloat 问题已解决!