一个JSON文本必须至less包含两个八位字节
我收到了这个错误,我找不到任何合理的答案,所以我想我会写一个问题的总结。
如果你在irb中运行这个代码片段:
JSON.parse( nil ) 你会看到以下错误:
 TypeError: can't convert nil into String 
 我期待函数返回nil ,而不是TypeError 。 如果您使用to_s转换所有input,那么您将看到八位字节错误: 
 JSON::ParserError: A JSON text must at least contain two octets! 
这很好,很好。 如果你不知道八位字节是什么,阅读这篇文章的总结和解决scheme: 什么是JSON八位字节,为什么需要两个?
解
 你传入的variables是一个空string。 不要试图在JSON.parse方法中使用空string。 
题
 所以,现在我知道错误的原因,我应该使用什么模式来处理这个问题? 我有点讨厌猴子补丁的JSON库允许nil值。 任何build议将不胜感激。 
 parsed = json && json.length >= 2 ? JSON.parse(json) : 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.org
JSONbuild立在两个结构上:
- 
名称/值对的集合。 在各种语言中,这被实现为对象,logging,结构,字典,散列表,键控列表或关联数组。 
- 
有序的值列表。 在大多数语言中,这是作为数组,vector,列表或序列来实现的。 
 因此,顶层所需的最less两个八比特组(8比特)将是{}或[] 
 国际海事组织,最好的解决办法是确保参数JSON.parse是一个strigified对象或一个strigified数组。  🙂 
 data.presence && JSON.parse(data) JSON.parse(data.presence || '{}') 
 hash = JSON.parse(json) rescue {} array = JSON.parse(json) rescue [] string = JSON.parse(json) rescue ''