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

时间:2012-10-13 15:16:44

标签: mysql json parsing node.js

假设我有一个对象:

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库请求时它们会丢失它们的scaping斜杠。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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

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