愚蠢的问题,但我无法弄明白......
我在Ruby中尝试了以下内容:
irb(main):020:0> JSON.load('[1,2,3]').class
=> Array
这似乎有效。虽然都不是
JSON.load('1').class
也不是这个
JSON.load('{1}').class
的工作原理。有什么想法吗?
答案 0 :(得分:6)
我会问那些编程图书馆的人。 AFAIK,1
不是有效的JSON对象,{1}
也不是1
,而{"number" : 1}
是库本身为fixnum 1生成的内容。
你需要做:a != JSON.parse(JSON.generate(a))
才能成为有效的json。错误是
{{1}}
答案 1 :(得分:3)
我说这是一个错误:
>> 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
我假设你正在使用它:(http://json.rubyforge.org/)
答案 2 :(得分:2)
JSON只支持对象根本不是真的 - json.org也不建议这个imo。它源自javascript,因此特别是字符串和数字也是有效的JSON:
var json_string = "1";
var p = eval('(' + json_string + ')');
console.log(p);
// => 1
typeof p
// => "number"
ActiveSupport::JSON
正确理解原始值JSON:
require 'active_support/json'
p = ActiveSupport::JSON.decode '1'
# => 1
p.class
# => Fixnum
require 'multi_json'
p = MultiJson.load '1'
# => 1
p.class
# => Fixnum
所以,正如a2800276所提到的,这肯定是一个错误。
但在撰写本文时,使用quirks_mode
方法时,ruby 2的JSON有load
enabled by default。
require 'json'
p = JSON.load '1'
# => 1
p.class
# => Fixnum
答案 3 :(得分:1)
第一个例子是有效的。后两个不是有效的JSON数据。转到json.org了解详情。
答案 4 :(得分:0)
如上所述,只允许在JSON的顶层使用数组和对象。
将数值包装在数组中可能会解决您的问题。
def set( value ); @data = [value].to_json; end
def get; JSON.parse( @data )[0]; end
答案 5 :(得分:0)
从JSON的基础知识出发:
Reference to see complete list of Json data types