Oj :: ParseError:无效的ID号-“ ^ rc”

时间:2019-01-15 16:33:44

标签: json ruby

为什么解析包含“ ^ 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.

2 个答案:

答案 0 :(得分:2)

Oj几乎完全是用编写的,因此我不会对其进行反向工程以回答题外的问题“为什么代码不起作用。”

行为进行一些反向工程是可以的。

▶ 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