使用 RAILS 使用特殊字符进行 JSON 序列化和反序列化

Nic*_*ley 5 ruby serialization json ruby-on-rails

对于如何使这个简单的线路工作,我真的觉得有点愚蠢,我环顾四周,似乎没有答案真正回答这个问题,任何人都可以告诉我如何序列化和反序列化这么简单的东西:

\n\n
JSON.parse("\xc3\x89".to_json)\nJSON::ParserError: 757: unexpected token at \'"\\u00e9"\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑:

\n\n

真正的问题更类似于在字符串中使用 \xc3\xa9 保存数据库中的哈希值,如下所示:

\n\n
{"Hu00c9MO":"JOUR"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

看来字符串不好,从 JSON 解码后无法带回 \xc3\xa9

\n

Nob*_*ita 4

我认为问题不在于"\xc3\x89". 我刚刚尝试过这个:

\n\n
JSON.parse("A".to_json)\nJSON::ParserError: 757: unexpected token at \'"A"\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如您所看到的,它会抛出相同类型的错误。

\n\n

这里的问题是,单个字符串“\xc3\x89”不是有效的 JSON,即使您可以使用to_json它来序列化它,当您尝试解析它时,它也会挂起。例如尝试这个:

\n\n
JSON.parse({\'key\' => \'\xc3\x89\'}.to_json)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如文档中所述:

\n\n
\n

JSON.generate 仅允许将对象或数组转换为 JSON\n 语法。然而,to_json 接受许多 Ruby 类,尽管它\n 仅充当序列化方法

\n
\n\n

.to_json只是一个替代方案JSON.generate

\n