【问题标题】:Error parsing stringified JSON string解析字符串化 JSON 字符串时出错
【发布时间】: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 库请求时,它们会松开斜线。

【问题讨论】:

    标签: mysql json parsing node.js


    【解决方案1】:

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

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

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

    【讨论】:

    • 反斜杠在检索过程中丢失了,我已经通过 MySQL 上的 SELECT 上的 REPLACE 解决了这个问题,但是这种代码看起来很愚蠢:REPLACE(field, "\\ \\", "\\\\\\\\")
    • 他们不应该在那里迷路......如果没有看到完整的查询代码,我不完全确定该建议什么。
    • 该死...问题出在这个函数上:stackoverflow.com/questions/7744912/… - 当我发现一些“%”在不需要时被转义时,我正在做一个完整的“回归基础”测试被转义 ¬¬ 查询在没有使用这个库替换的情况下工作得很好:github.com/felixge/node-mysql
    • stackoverflow 礼仪要求您接受此答案,因为它可以帮助您解决问题。
    【解决方案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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2017-08-27
      • 1970-01-01
      • 2022-09-27
      相关资源
      最近更新 更多