1

假设我有一个对象:

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 库请求时,它们会松开斜线。

4

2 回答 2

2

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

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

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

于 2012-10-13T15:19:15.143 回答
1

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

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

这看起来很愚蠢,但是当您在节点上声明一个字符串时,它会自动取消转义,然后:

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

变成这样:

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

当被 MySQL 接收时,它变成:

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

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

于 2012-10-13T21:15:25.397 回答