解析字符串化 JSON 字符串时出错

Posted

技术标签:

【中文标题】解析字符串化 JSON 字符串时出错【英文标题】:Error parsing stringified JSON string 【发布时间】:2012-10-04 04:13:16 【问题描述】:

假设我有一个对象:

person='name':'john "Garfield"';

我把它转换成字符串:

JSON.stringify(person);
// RESULT: "name":"john \"Garfield\""

然后我将该字符串存储在 mysql 或其他任何东西上,然后我在 node.js 上获取该字符串(使用交互式控制台):

string = '"name":"john \"Garfield\""';
// RESULT: "name":"john "Garfield""

然后我解析对象:

JSON.parse(string);
RESULT: SyntaxError: Unexpected token G

如何解析存储的 json 字符串化字符串?我在 MySQL 上有它们,当 MySQL 库请求时,它们会松开斜线。

【问题讨论】:

【参考方案1】:

当你有字符串时,你(应该)注意到反斜杠已经“丢失”了。如果它存储在数据库中并从数据库中检索,那么代码应该可以正常工作。但是,如果您手动输入该字符串以将其解析出来,则需要转义反斜杠。

string = '"name":"John \\"Garfield\\""';

如果反斜杠在 MySQL 插入过程中丢失,请在插入之前尝试转义它们。

【讨论】:

反斜杠在检索过程中丢失了,我已经通过 MySQL 上的 SELECT 上的 REPLACE 解决了这个问题,但是这种代码看起来很愚蠢:REPLACE(field, "\\ \\", "\\\\\\\\") 他们不应该在那里迷路......如果没有看到完整的查询代码,我不完全确定该建议什么。 该死...问题出在这个函数上:***.com/questions/7744912/… - 当我发现一些“%”在不需要时被转义时,我正在做一个完整的“回归基础”测试被转义 ¬¬ 查询在没有使用这个库替换的情况下工作得很好:github.com/felixge/node-mysql *** 礼仪要求您接受此答案,因为它可以帮助您解决问题。【参考方案2】:

我已经用 MySQL 上的 REPLACE 解决了这个问题,我不明白为什么必须这样做,好吧,我明白但我不喜欢这个解决方案,使用 node.js 和 MySQL 库在这里从节点调用 MySQL 是我所做的语句:

REPLACE(`field`, "\\\\", "\\\\\\\\") as field2

这看起来很愚蠢,但是当你在节点上声明一个字符串时,它会自动转义,那么这个:

string = 'REPLACE(`field`, "\\\\", "\\\\\\\\") as field2';

变成这样:

REPLACE(`field`, "\\", "\\\\") as field2

当被 MySQL 接收时,它变成:

REPLACE(`field`, "\", "\\") as field2

我觉得它必须是另一种方式!

【讨论】:

以上是关于解析字符串化 JSON 字符串时出错的主要内容,如果未能解决你的问题,请参考以下文章

解析参数化查询C#时出错[重复]

使用 Newtonsoft.Json 解析 JSON 时出错

无法正确解析通过网络发送的字符串化 Json

处理 Json 请求时出错

使用换行符解析 json 时出错

解析字典的最快pythonic方法,其中值是字节字符串化的json对象