Ruby 仅用于整数的JSON对象
这是个愚蠢的问题,但我搞不懂 我在Ruby中尝试了以下内容: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
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”对
==
的语义不同,它可以比较引用(Object.==does),但通常会重写它以提供语义比较。鲁比有,相等吗?检查相同的对象。从JSON可以表示四种基本类型(字符串、数字、布尔值和null)和两种结构化类型(对象和数组)。因此,1是一个有效的JSON。不,它不是,根据您发布的链接:JSON text=object/array