我正在尝试获取带有内部对象且没有密钥的JSON请求。但是我在位置1收到了意外令牌{
下面给出了示例JSON。
{ { “ empid”:“ 001”, “学术类型”:“单身汉”, “ academicdegree”:“ BE”, “学术专业化”:“计算机科学” }, { “ empid”:“ 002”, “学术类型”:“大师”, “学历”:“ MBA”, “ academicSpecialization”:“人力资源” } }
我尝试使用以下代码
createEmployeeAcademics(req, res, next) {
let body = '';
var fbResponse = [];
req.on('data', function (chunk) {
console.log(chunk);
body += chunk;
console.log(body);
});
req.on('end', function () {
fbResponse.length = 0;
var arrayValues = JSON.parse(body);
for (var i = 0; i < arrayValues.length; i++) {
fbResponse.push(arrayValues[i]);
}
});
}
我遇到错误了
SyntaxError:意外令牌{在JSON中的位置1 在JSON.parse()
答案 0 :(得分:3)
这是无效的Java脚本对象或列表,并且已经解析。尝试制作列表然后仅循环
喜欢
[ { "empid" : "001", "academictype": "Bachelor", "academicdegree": "BE", "academicSpecialization": "Computer Science" }, { "empid": "002", "academictype": "Masters", "academicdegree": "MBA", "academicSpecialization": "Human Resources" } ]
答案 1 :(得分:2)
您收到Unexpected token
错误,因为JSON.parse(body)
无法解析您提供的JSON。使用在线tools美化JSON可以更好地调试此问题。输入您的字符串:
{
{
"empid": "001",
"academictype": "Bachelor",
"academicdegree": "BE",
"academicSpecialization": "Computer Science"
}, {
"empid": "002",
"academictype": "Masters",
"academicdegree": "MBA",
"academicSpecialization": "Human Resources"
}
}
您的JSON缺少与objects
相关的重要属性。
JSON对象用花括号{}包围。
JSON对象以键/值对的形式编写。
您的最外面的花括号后没有任何键值对,而是直接从另一个对象开始。您可以通过以下任一方法来更正JSON:
1。使外部JSON成为数组
[
{
"empid": "001",
...
}, {
"empid": "002",
...
}
]
数组可以直接将对象作为其子对象,并且可以顺序访问。
2。将键添加到外部对象的子对象:
{
"001": {
"academictype": "Bachelor",
"academicdegree": "BE",
"academicSpecialization": "Computer Science"
},
"002": {
"academictype": "Masters",
"academicdegree": "MBA",
"academicSpecialization": "Human Resources"
}
}
通过这种方式,您可以使用对象的唯一ID(例如empid
)直接访问对象,尽管遍历对象可能不像数组那样简单。
答案 2 :(得分:1)
您的示例JSON无效。您可以使用json lint来验证json对象。
答案 3 :(得分:1)
您显示的样本JSON无效。如果那是您的服务器提供数据的方式,那么该服务器正在提供格式错误的JSON。
您可能需要修复服务器才能以键值对格式发送数据。
有两种方法可以做到这一点。
1)将雇员数组放在包装对象中:
{"employees": [{ "empid" : "001", "academictype": "Bachelor", "academicdegree": "BE", "academicSpecialization": "Computer Science" }, { "empid": "002", "academictype": "Masters", "academicdegree": "MBA", "academicSpecialization": "Human Resources" }]}
2)放置按员工ID映射的员工:
{ "001":{ "empid" : "001", "academictype": "Bachelor", "academicdegree": "BE", "academicSpecialization": "Computer Science" }, "002":{ "empid": "002", "academictype": "Masters", "academicdegree": "MBA", "academicSpecialization": "Human Resources" } }
根据您选择的格式,客户端代码会略有不同。