2011-08-26 56 views
36

我有输入数据,这是我存储在变量messages什么是JSON八位字节,为什么需要两个?

connection = ContextIO::Connection.new(key, secret) 
messages = connection.all_messages(:account => account, :limit => 100, :since => (Time.now - 3000.day)) 

可变messages在JSON被格式化。然后我执行此操作:

foo = JSON.parse(messages)['data'] 

大多数情况下,这是有效的。现在每一次,我收到此错误信息:

A JSON text must at least contain two octets! 

该错误消息则指的是线路JSON.parse(messages)['data']

  1. 什么是八位?

  2. 为什么JSON文本必须包含至少两个八位字节?

  3. 如何防止我的代码打破每次messages没有两个字节?

谢谢!

回答

45
  1. 一个八位长字节是一组8位组成。今天,八位字节与字节是同义词,但字节在历史上被称为任何“本地”比特分组,这可能意味着4,6,7或8比特。
  2. JSON文本必须包含至少两个八位字节,因为JSON文档的顶层结构是一个数组或对象,以及那些的最短表示被[]{},分别。
  3. 检查值messages。它可能是空的,未设置或由一个数字组成(如4),它是而不是有效的JSON,但被许多JSON实现所接受。
6

虽然我完全同意对方的回答一致,在我来说,我有一个有效的JSON字符串,但仍然收到“JSON文本必须至少包含两个字节”错误消息试图JSON.parse时。

我的问题是,我不指定内容类型的application/json。一旦我补充说,JSON.parse工作没有错误。

希望这可以帮助别人。

+1

Stephen,这正是我需要的!你在哪里添加了“application/json”这一行? – Casey

相关问题