SyntaxError: Unexpected token in JSON at position 1
Posted
技术标签:
【中文标题】SyntaxError: Unexpected token in JSON at position 1【英文标题】:SyntaxError: Unexpected token in JSON at position 1SyntaxError: Unexpected token in JSON at position 1 【发布时间】:2019-09-20 18:54:55 【问题描述】:我正在尝试获取包含没有密钥的内部对象的 JSON 请求。但我在位置 1 处得到了 Unexpected token
示例 JSON 如下所示。
“empid”:“001”, “学术类型”:“学士”, “学历”:“BE”, “学术专业”:“计算机科学” , "empid": "002", "academictype": "硕士", “学历”:“MBA”, “学术专业”:“人力资源”
我试过下面的代码
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: Unexpected token in JSON at position 1 在 JSON.parse() 处
【问题讨论】:
JSON "是名称/值对的集合",所以你的 JSON 无效,这就是它不解析的原因 @George — 该网站已过时。您给出的描述对于 JSON 中的对象是正确的,这就是我们在这里所拥有的,但对于一般的 JSON 则不正确。 @Quentin 没意识到,你能推荐一个最新的吗?尽管如此,它仍然是了解您不知道的 JSON 是什么的良好基础。 当前规范为tools.ietf.org/html/rfc7159 【参考方案1】:您的示例 JSON 无效。您可以使用json lint 来验证您的 json 对象。
【讨论】:
【参考方案2】:这是无效的 Java 脚本对象或列表,并且已被解析。尝试制作列表然后只循环
喜欢
[ "empid" : "001", "academictype": "Bachelor", "academicdegree": "BE", "academicSpecialization": "Computer Science" , "empid": "002", "academictype": "Masters", "academicdegree": "MBA", "academicSpecialization": "Human Resources" ]
【讨论】:
【参考方案3】:您显示的示例 JSON 不是有效的 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"
根据您选择的格式,客户端代码会略有不同。
【讨论】:
【参考方案4】:您收到 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
)直接访问对象,尽管遍历它们可能不像数组那么容易。
【讨论】:
以上是关于SyntaxError: Unexpected token in JSON at position 1的主要内容,如果未能解决你的问题,请参考以下文章
求教php运行时出错:Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION 。。。
Import Unexpected identifier + SyntaxError: Unexpected string
js动态加载的a标签的onclick事件参数传递,一直报Uncaught SyntaxError: Invalid or unexpected token