对于如何使这条简单的线路工作,我真的觉得有点愚蠢,我环顾四周,似乎没有答案能真正回答这个问题,谁能告诉我如何序列化和反序列化这么简单的东西:
JSON.parse("É".to_json)
JSON::ParserError: 757: unexpected token at '"\u00e9"'
编辑:
真正的问题更像是在数据库中使用字符串中的 é 保存哈希,如下所示:
{"Hu00c9MO":"JOUR"}
看来字符串不好,从JSON解码后无法带回é
对于如何使这条简单的线路工作,我真的觉得有点愚蠢,我环顾四周,似乎没有答案能真正回答这个问题,谁能告诉我如何序列化和反序列化这么简单的东西:
JSON.parse("É".to_json)
JSON::ParserError: 757: unexpected token at '"\u00e9"'
编辑:
真正的问题更像是在数据库中使用字符串中的 é 保存哈希,如下所示:
{"Hu00c9MO":"JOUR"}
看来字符串不好,从JSON解码后无法带回é
我认为问题不在于"É"
. 我刚试过这个:
JSON.parse("A".to_json)
JSON::ParserError: 757: unexpected token at '"A"'
如您所见,它会引发相同类型的错误。
这里的问题是单个字符串 "É"不是有效的 JSON,即使您可以使用to_json
它来序列化它,当您尝试解析它时,它也会挂起。试试这个例如:
JSON.parse({'key' => 'É'}.to_json)
如文档中所述:
JSON.generate 只允许将对象或数组转换为 JSON 语法。然而,to_json 接受许多 Ruby 类,即使它只是作为序列化的一种方法
(.to_json
只是替代品JSON.generate
)
根据http://www.json.org/ JSON应该是一个对象{id: value}
或者一个数组[value1, value2]
。
您传递的只是一个值。尝试类似:JSON.parse(["É"].to_json)
或JSON.parse({value: "É"}.to_json)
编辑问题已编辑:
Accord http://www.json.org当 JSON 在 object 上时{id: value}
,id 可以是除 " 或 \ 或控制字符之外的任何 UNICODE 字符这就是您无法在 id 侧取回 "É" 的原因。
也许解决方案是在保存到 DB 之前用另一个有效字符替换“\”,并在从 DB 读取它时进行反向替换,或者只是用“\”转义“\”。