首页 > 解决方案 > Oj::ParseError: 不是有效的 ID 号 - "^rc"

问题描述

为什么在解析包含“^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 numberOj::ParseError是宽广得救——An Exception that is raised as a result of a parse error while parsing a JSON document.

标签: jsonruby

解决方案


Oj几乎完全是用编写的,所以我不打算对其进行逆向工程来回答题外话“为什么代码不起作用”的问题。</p>

不过,对其行为进行一些逆向工程是可以的。

▶ 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我机器上的最新版本可以很好地解析您的输入,没有任何故障。


推荐阅读