首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JSON文本必须至少包含两个八位字节

JSON文本必须至少包含两个八位字节
EN

Stack Overflow用户
提问于 2011-12-06 02:47:27
回答 4查看 74.8K关注 0票数 70

我收到了这个错误,我找不到这个问题的合理答案,所以我想我应该写一个问题的摘要。

如果您在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值。任何建议都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-06 02:52:16

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)
票数 44
EN

Stack Overflow用户

发布于 2017-02-20 17:52:05

data.presence && JSON.parse(data)

JSON.parse(data.presence || '{}')
票数 4
EN

Stack Overflow用户

发布于 2016-10-29 16:52:25

根据json.org的说法

JSON建立在两种结构之上:

  1. 名称/值对的集合。在各种语言中,这被实现为对象、记录、结构、字典、哈希表、键表或关联数组。
  2. 是值的有序列表。在大多数语言中,这是以数组、向量、列表或序列的形式实现的。

因此,顶层所需的最少两个八位字节(8位)将是{}[]

最好的解决方案是确保JSON.parse的参数要么是一个条形化对象,要么是一个条形化数组。:-)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8390256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档