我收到了这个错误,我找不到任何合理的答案来回答这个问题,所以我想我会写一个问题的摘要。
如果您在 irb 中运行此代码段:
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
值。任何建议将不胜感激。
最佳答案
parsed = json && json.length >= 2 ? JSON.parse(json) : nil
但实际上库应该能够处理这种情况并返回 nil。具有内置 JSON 支持的 Web 浏览器似乎完全按照您的预期工作。
或者用一个稍微有点侵入性的迷你补丁来做到这一点:
module JSON
def self.parse_nil(json)
JSON.parse(json) if json && json.length >= 2
end
end
parsed = JSON.parse_nil(json)
关于json - JSON 文本必须至少包含两个八位字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8390256/