Ruby 仅用于整数的JSON对象

Ruby 仅用于整数的JSON对象,ruby,json,Ruby,Json,这是个愚蠢的问题,但我搞不懂 我在Ruby中尝试了以下内容: irb(main):020:0> JSON.load('[1,2,3]').class => Array 这似乎奏效了。而两者都不是 JSON.load('1').class 也不是这个 JSON.load('{1}').class 工作。有什么想法吗?我认为这是一个bug: >> JSON.parse(1.to_json) JSON::ParserError: A JSON text must at l

这是个愚蠢的问题,但我搞不懂

我在Ruby中尝试了以下内容:

irb(main):020:0> JSON.load('[1,2,3]').class
=> Array
这似乎奏效了。而两者都不是

JSON.load('1').class
也不是这个

JSON.load('{1}').class
工作。有什么想法吗?

我认为这是一个bug:

>> JSON.parse(1.to_json)
JSON::ParserError: A JSON text must at least contain two octets!
     from /opt/local/lib/ruby/gems/1.8/gems/json-1.1.3/lib/json/common.rb:122:in `initialize'
     from /opt/local/lib/ruby/gems/1.8/gems/json-1.1.3/lib/json/common.rb:122:in `new'
     from /opt/local/lib/ruby/gems/1.8/gems/json-1.1.3/lib/json/common.rb:122:in `parse'
     from (irb):7

我想你是在用:()

我会问编程库的人。好吧,
1
不是有效的JSON对象,
{1}
也不是有效的JSON对象,但是
1
是库本身为fixnum 1生成的

您需要执行:
{“number”:1}
才能成为有效的json。问题是

a != JSON.parse(JSON.generate(a))

第一个例子是有效的。后两个不是有效的JSON数据。有关详细信息,请转至。

如上所述,JSON的顶层只允许使用数组和对象

也许将值包装在数组中可以解决问题

def set( value ); @data = [value].to_json; end
def get; JSON.parse( @data )[0]; end

仅支持JSON的对象是不正确的——JSON.org也不建议使用此imo。它源自javascript,因此特别是字符串和数字也是有效的JSON:

var json_string=“1”;
var p=eval('('+json_string+');
控制台日志(p);
// => 1
p型
//=>“编号”
正确理解原始值JSON:

需要“活动\u支持/json”
p=ActiveSupport::JSON.decode“1”
# => 1
p、 阶级
#=>Fixnum
而且:

require'multi_json'
p=MultiJson.load“1”
# => 1
p、 阶级
#=>Fixnum
所以,正如a2800276所提到的,这一定是一个bug


但在撰写本文时,ruby 2的JSON在使用
load
方法时具有
quirks\u模式

require'json'
p=JSON.load“1”
# => 1
p、 阶级
#=>Fixnum

从JSON的基本概念开始:

  • JSON中的数据类型可以是:
  • Json对象。。。(还有更多)

  • 现在,任何Json数据都必须封装在顶层的“Json对象”中
  • 要理解为什么会这样,您可以看到,如果顶层没有Json对象,一切都会变得松散,整个Json中只能有一种数据类型。i、 数字、字符串、数组、空值等。。。但只有一个
  • “Json对象”类型的固定格式为“键”:“值”对
  • 不能只存储值。因此,不能有类似{1}的东西。 您需要输入正确的格式,即“key”:“value”对

哼,我不太明白。JSON.parse(JSON.generate(a))返回的对象不应该是与a相同的对象,但应该具有相同的内容。在这种情况下,does==或!=比较内容(obj#hash)或引用?Ruby不是Java!
==
的语义不同,它可以比较引用(Object.==does),但通常会重写它以提供语义比较。鲁比有,相等吗?检查相同的对象。从JSON可以表示四种基本类型(字符串、数字、布尔值和null)和两种结构化类型(对象和数组)。因此,1是一个有效的JSON。不,它不是,根据您发布的链接:
JSON text=object/array