愚蠢的問題,但我無法弄清楚..JSON對象只是一個整數
我想在Ruby中的以下內容:
irb(main):020:0> JSON.load('[1,2,3]').class
=> Array
這似乎是工作。雖然沒有
JSON.load('1').class
也不是這
JSON.load('{1}').class
作品。有任何想法嗎?
愚蠢的問題,但我無法弄清楚..JSON對象只是一個整數
我想在Ruby中的以下內容:
irb(main):020:0> JSON.load('[1,2,3]').class
=> Array
這似乎是工作。雖然沒有
JSON.load('1').class
也不是這
JSON.load('{1}').class
作品。有任何想法嗎?
我想請問誰編程庫的傢伙。據我所知,1
不是有效的JSON對象,也不是{1}
但1
是什麼庫本身產生的1長整數
你需要做的:{"number" : 1}
是有效的JSON。錯誤是
a != JSON.parse(JSON.generate(a))
我會說這是一個錯誤:
>> 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/)
是的,我用http://json.rubyforge.org/ – Nils 2008-12-16 10:13:39
第一個例子是有效的。其次兩個是無效的JSON數據。詳細信息請參閱json.org。
如上所述,只有數組和對象被允許在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 + ')');
console.log(p);
// => 1
typeof p
// => "number"
ActiveSupport::JSON
正確理解原始值JSON:
require 'active_support/json'
p = ActiveSupport::JSON.decode '1'
# => 1
p.class
# => Fixnum
也是如此MultiJson:
require 'multi_json'
p = MultiJson.load '1'
# => 1
p.class
# => Fixnum
所以,如提到的2800276,這必須是一個錯誤。
,但截至發稿時,紅寶石2的JSON使用load
方法時有quirks_mode
enabled by default。
require 'json'
p = JSON.load '1'
# => 1
p.class
# => Fixnum
從JSON就是最基礎:
Reference to see complete list of Json data types
humm I'dont確切地得到它。由JSON.parse(JSON.generate(a))返回的對象不應該與a相同,而應該具有相同的內容。在這種情況下,==或!=比較內容(obj#hash)還是參考? – Nils 2008-12-16 10:26:40