javascript 当字符串包含“null”子字符串时JSON.parse()失败...例如包含意大利语单词“annullo”或“annulare”

xdyibdwo  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(371)

大家早上好,提前感谢大家的任何建议。我已经写了一个小的web应用程序,用php和javascript在邮票数据库中执行简单的搜索。
服务器将整个数据库以JSON格式发送给浏览器,客户端使用javascript代码进行查询。JSON的结构如下:{"ck":0,"db":[["string11","string12","string13"],["string21","string22","string23"], etc... } .
到目前为止,该系统运行完美,可以显示超过1500个邮票。突然,它停止工作,在浏览器的Javascript控制台,出现以下错误消息:VM672:1 Uncaught SyntaxError: Expected ',' or ']' after array element in JSON at position 97506 at JSON.parse (<anonymous>) ...etc...
经过一系列的测试,通过排除,我发现是最后添加的记录中的单词"annullo"产生了错误。
我猜可能是子字符串"null"造成了问题,但我不知道如何摆脱它。一个真正奇怪的事情是,虽然JSON.parse()函数失败,但浏览器的javascript控制台以及其他JSON验证工具将服务器的响应识别为有效的JSON。
谢谢你的帮助!
2023 - 02 - 01:其实我发现了问题:客户端在解析之前我有这个命令的几行代码:data = data.replaceAll("null","\"\"");,其中data是从服务器接收到的字符串形式的json。我将做一些更改,使此替换不再必要...
谢谢大家。

vwkv1x7d

vwkv1x7d1#

我想我明白问题所在了。所有字符串都用引号括起来了。

{example: "example"}

在这个例子的开发过程中,他们一定已经输入了"annullo",但是他们忘了插入引号。如果它是空的,不是字符串,它可能看起来像这样,没有引号。
json = {示例:空}
然而,由于annullo在javascript中是一个无效的单词,并且不是一个字符串,所以它会给出一个错误。
正确的做法是纠正源代码中的错误,将其转换为null,不过,我相信你也可以使用这个正则表达式,但要做测试,以确保在其他地方没有不适当的替换。

json.replace(/.+["']: ?annull(o|are)[\n,}]$/g, matched => {
    return matched.replace(/annull(o|are)/, 'null')
})

相关问题