JSON.parse 没有预期的行为

Posted

技术标签:

【中文标题】JSON.parse 没有预期的行为【英文标题】:JSON.parse not having the expected behaviour 【发布时间】:2018-09-12 09:29:14 【问题描述】:

我正在尝试获取由post 发送的json 请求,并在其上执行JSON.parse。但是发生了这个错误:

未捕获的 SyntaxError:JSON 中位置 2 的意外标记 m 在 JSON.parse() 在:1:19

下面的代码重现了错误:

const string = ' msg_reject: \'Rejeitado porque sim\', accept: 1, photo: \'FSADKJK23B1\' '
const json = JSON.parse(string)

这就是我在post 中发送它的方式

msg_reject: 'Rejeitado porque sim', accept: 1, photo: 'FSADKJK23B1'

我发送的方式有问题吗?

【问题讨论】:

这不是一个有效的 json 所以你为什么会得到这个错误 in JSON, Why is each name quoted?的可能重复 【参考方案1】:

格式正确的 JSON 字符串在每个键和每个字符串值周围都有 " 双引号。

const string = ' "msg_reject": "Rejeitado porque sim", "accept": 1, "photo": "FSADKJK23B1" ';
const json = JSON.parse(string);
console.log(json);

【讨论】:

【参考方案2】:

在 post 中发送时,首先将对象字符串化, 使用 JSON.stringify(object) 并发送,而检索 JSON.parse 应该可以正常工作

【讨论】:

【参考方案3】:

您的 JSON 字符串格式不正确,您必须为键和值添加双引号 "

const string = ' "msg_reject": "Rejeitado porque sim", "accept": 1, "photo": "FSADKJK23B1" ';

有很多在线解析器可以用来验证你的 JSON 字符串,我通常使用https://jsonformatter.org/json-parser 来验证我的 JSON。

【讨论】:

以上是关于JSON.parse 没有预期的行为的主要内容,如果未能解决你的问题,请参考以下文章

为啥 JSON.parse(['1234']) 返回 1234?

如果没有提供包装密钥,那么`C_wrapKey` API的预期行为是什么?

sprintf为null char字符串时的预期行为

SELECT 子句中多个集合返回函数的预期行为是啥?

变量的行为不符合预期

变量的行为不符合预期