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

标签 json ruby

我收到了这个错误,我找不到任何合理的答案来回答这个问题,所以我想我会写一个问题的摘要。

如果您在 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/

相关文章:

javascript - node-red js 中的 HTTP POST

php - FullCalendar - 通过 ajax 发送 View

jquery - Ajax/Jquery 自动完成 JSON 数据

ruby - 使用 Mongoid 和 Ruby 查询最近 30 天的日期范围?

ruby - Ruby 中的位掩码 : Get numbers which generated the bitmask

ruby - Arduino POST ERROR 错误请求行 `'

java - JAXRS 2.0 接收未定义数量的参数

ruby - 为什么我不能用 gsub 替换字符串中的 '\\+'?

ruby-on-rails - 无法使用 2.3.0p ruby​​ 安装 gem nokogiri

ruby-on-rails - 来自 Rails 4.2 图像缓存的特定图像将不会更新,无论我们尝试什么