为什么解析包含“ ^ r”和其他字符的json字符串(使用Oj解析器)时出现错误?
错误-“ ^ r”:
Oj.load("{\"s\":{\"s\":[\"^rc\"]}}")
=> Oj::ParseError: not a valid ID number at line 1, column 15
没有错误-“ ^ b”或“ ^ r”:
Oj.load("{\"s\":{\"s\":[\"^bc\"]}}")
=> {"s"=>{"s"=>["^bc"]}}
Oj.load("{\"s\":{\"s\":[\"^r\"]}}")
=> {"s"=>{"s"=>["^r"]}}
UPD
如何知道什么可能导致错误Oj::ParseError: not a valid ID number
的符号组合。
Oj::ParseError
可以挽救-An Exception that is raised as a result of a parse error while parsing a JSON document.
答案 0 :(得分:2)
Oj
几乎完全是用c编写的,因此我不会对其进行反向工程以回答题外的问题“为什么代码不起作用。”
对行为进行一些反向工程是可以的。
▶ Oj.dump(foo: "^bar")
#⇒ "{\":foo\":\"^bar\"}"
▶ Oj.dump(foo: "^rar")
#⇒ "{\":foo\":\"\\u005erar\"}"
也就是说,它了解了关于^r
的一些信息。要解决此问题,请准备您的负载:
▶ Oj.load("{\"s\":{\"s\":[\"^rc\"]}}".gsub(/\^/, "\\u005e"))
#⇒ {"s"=>{"s"=>["^rc"]}}
FWIW,我机器上的最新Oj
可以很好地解析您的输入,而不会出现故障。
答案 1 :(得分:0)
请先阅读文档,然后再询问。其他文档很清楚:https://github.com/ohler55/oj/blob/master/pages/Encoding.md