【发布时间】:2012-01-13 11:38:33
【问题描述】:
我收到了这个错误,我找不到任何合理的答案来回答这个问题,所以我想我会写一个问题的摘要。
如果你在 irb 中运行这个 sn-p:
JSON.parse( nil )
您将看到以下错误:
TypeError: can't convert nil into String
我有点期待函数返回nil,而不是TypeError。如果您使用to_s 转换所有输入,那么您将看到八位字节错误:
JSON::ParserError: A JSON text must at least contain two octets!
这很好。如果您不知道八位字节是什么,请阅读这篇文章以获取摘要和解决方案: What is a JSON octet and why are two required?
解决方案
您传入的变量是一个空字符串。不要尝试在 JSON.parse 方法中使用空字符串。
问题
那么,现在我知道了错误的原因,我应该使用什么模式来处理这个问题?我有点讨厌猴子修补 JSON 库以允许 nil 值。任何建议将不胜感激。
【问题讨论】:
-
可能是因为绝对 MINIMUM 有效的 javascript 字符串是
"",它是两个八位字节(绝对最小的最小对象是{})。可能是编写编码器/解析器的人不认为null也是有效的javascript 值。
标签: ruby-on-rails ruby json irb