我真的觉得有点愚蠢,为了让这个简单的线路工作怎么做,我环顾四周,似乎没有回答真的回答这个问题,任何人都可以告诉我如何序列化和反序列化一些简单的事情:
JSON.parse("É".to_json)
JSON::ParserError: 757: unexpected token at '"\u00e9"'
编辑:
真正的问题更类似于在数据库中使用字符串中的é保存哈希,如下所示:
{"Hu00c9MO":"JOUR"}
似乎字符串不好,我无法从JSON解码后带回é
答案 0 :(得分:4)
我认为问题不在于"É"
。我刚试过这个:
JSON.parse("A".to_json)
JSON::ParserError: 757: unexpected token at '"A"'
正如你所看到的,它会引发同样类型的错误。
这里的问题是单个字符串“É”不是有效的JSON ,即使您可以使用to_json
序列化它,当您尝试解析它时,它会挂起。试试这个例子:
JSON.parse({'key' => 'É'}.to_json)
如docs中所述:
JSON.generate只允许将对象或数组转换为JSON 句法。然而,to_json接受了许多Ruby类,即使它 仅作为序列化的方法
(.to_json
只是JSON.generate
)
答案 1 :(得分:2)
Accord http://www.json.org/ JSON 应该是对象{id: value}
或数组[value1, value2]
。
您要传递的只解析一个值。尝试类似:JSON.parse(["É"].to_json)
或JSON.parse({value: "É"}.to_json)
编辑编辑问题:
Accord http://www.json.org当JSON在对象{id: value}
上时,id可以是 任何UNICODE字符除“或\或控制字符 这是为什么你不能在id方面取回“É”。
也许解决方案是在保存到DB之前用另一个有效字符替换“\”,当你从DB读取它时执行反向替换或者只用“\”转义“\”。