解析字符串化 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 字符串时出错的主要内容,如果未能解决你的问题,请参考以下文章