mysql
  • json
  • parsing
  • node.js
  • 2012-10-13 78 views 1 likes 
    1

    比方说,我有一个对象:错误解析字符串化JSON字符串

    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库时,他们松开了他们的缩放斜线。

    回答

    2

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

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

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

    +0

    反斜杠在检索过程中丢失了,我已经用SELECT上的REPLACE解决了这个问题,但是这种代码看起来很愚蠢: _REPLACE('field',“\\\\”,“\” \\\\\\“)_ –

    +0

    他们不应该迷失在那里...我不完全确定没有看到完整的查询代码的建议。 –

    +0

    该死的......问题出现在这个函数中:http://stackoverflow.com/questions/7744912/making-a-javascript-string-sql-friendly - 当我发现我正在做一个完整的“回到基础”测试有些“%”在不需要扫描时会被转义¬¬不需要使用这个lib进行替换,查询就能很好地工作:https://github.com/felixge/node-mysql –

    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 
    

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

    相关问题