json - 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 number
。
Oj::ParseError
是宽广得救——An Exception that is raised as a result of a parse error while parsing a JSON document.
解决方案
Oj
几乎完全是用c编写的,所以我不打算对其进行逆向工程来回答题外话“为什么代码不起作用”的问题。</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
我机器上的最新版本可以很好地解析您的输入,没有任何故障。
推荐阅读
- javascript - 使用 Promise.all() 进行多个 fetch() 调用不起作用
- python - 如何从标签列表中构建属性列表 Python Beautifulsoup4
- android - 打开pdf文件错误:无法访问此文件检查位置或网络,然后重试
- c++ - 我在 C++ 中键入分号后,代码行移动到下一行
- arrays - 在多列中搜索一个值并返回找到的列右列中的所有结果
- firebase - 将 React Router 页面视图发送到 Firebase Analytics
- python - TensorFlow 错误和警告
- powerbi - PowerBI - 具有变化值的累积图
- swift - 来自 URL 旋转的 UIImageView 导致图像缩小?(斯威夫特 5,Xcode 11)
- c# - 应用于 html 字符串时替换不起作用