【问题标题】:A JSON text must at least contain two octets! (JSON::ParserError)JSON 文本必须至少包含两个八位字节! (JSON::ParserError)
【发布时间】:2016-08-30 14:37:37
【问题描述】:

我正在使用一个读取 .json 文件的 Ruby 脚本。

这是 JSON 文件:

{
  "feed.xml": "93d5b140dd2b4779edef0347ac835fb1",
  "index.html": "1cbe25936e392161bad6074d65acdd91",
  "md5.json": "655d7c1dbf83a271f348a50a44ba4f6a",
  "test.sh": "9be192b1b5a9978cb3623737156445fd",
  "index.html": "c064e204040cde216d494776fdcfb68f",
  "main.css": "21b13d87db2186d22720e8c881a78580",
  "welcome-to-jekyll.html": "01d7c7d66bdeecd9cd69feb5b4b4184d"
}

它是完全有效的,并且在尝试读取它之前会检查它的存在。示例:

if File.file?("md5.json")
  puts "MD5s exists"
  mddigests = File.open("md5.json", "r")
  puts "MD5s" + mddigests.read
  items = JSON.parse(mddigests.read) <--- Where it all goes wrong.
  puts items["feed.xml"]

在那之前一切正常:

MD5s exists
MD5s{
  "feed.xml": "93d5b140dd2b4779edef0347ac835fb1",
  "index.html": "1cbe25936e392161bad6074d65acdd91",
  "md5.json": "655d7c1dbf83a271f348a50a44ba4f6a",
  "test.sh": "9be192b1b5a9978cb3623737156445fd",
  "index.html": "c064e204040cde216d494776fdcfb68f",
  "main.css": "21b13d87db2186d22720e8c881a78580",
  "welcome-to-jekyll.html": "01d7c7d66bdeecd9cd69feb5b4b4184d"
}
common.rb:156:in `initialize': A JSON text must at least contain two octets! (JSON::ParserError)

我已经搜索并尝试了很多不同的东西,但无济于事。我难住了。谢谢!

【问题讨论】:

  • 如果注释掉第一个 middigests.read 是否还会出现这种情况?

标签: ruby json


【解决方案1】:

您对read() 进行了重复调用,此时一切都出错了。用变量mddigests 替换对read() 的第二次调用,一切都应该没问题。

这段代码应该像你期望的那样工作:

if File.file?("md5.json")
  puts "MD5s exists"
  mddigests = File.open("md5.json", "r")
  digests = mddigests.read
  puts "MD5s" + digests
  items = JSON.parse(digests)   #<--- This should work now!
  puts items["feed.xml"]
end

原因是文件指针移动到第一个read() 之后,第二个read() 位于文件末尾,因此消息至少需要2 个八位字节。

【讨论】:

  • 非常感谢!这有点奇怪,但我猜这就是红宝石的工作原理:)
猜你喜欢
  • 2012-01-13
  • 2013-03-27
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 2021-04-21
  • 2022-01-13
  • 2022-08-21
相关资源
最近更新 更多