假设我有一个对象:
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斜杠。
答案 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
我觉得它必须是另一种方式!