2008-12-16 66 views
4

愚蠢的問題,但我無法弄清楚..JSON對象只是一個整數

我想在Ruby中的以下內容:

irb(main):020:0> JSON.load('[1,2,3]').class 
=> Array 

這似乎是工作。雖然沒有

JSON.load('1').class 

也不是這

JSON.load('{1}').class 

作品。有任何想法嗎?

回答

6

我想請問誰編程庫的傢伙。據我所知,1不是有效的JSON對象,也不是{1}1是什麼庫本身產生的1長整數

你需要做的:{"number" : 1}是有效的JSON。錯誤是

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

humm I'dont確切地得到它。由JSON.parse(JSON.generate(a))返回的對象不應該與a相同,而應該具有相同的內容。在這種情況下,==或!=比較內容(obj#hash)還是參考? – Nils 2008-12-16 10:26:40

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/

+0

是的,我用http://json.rubyforge.org/ – Nils 2008-12-16 10:13:39

1

第一個例子是有效的。其次兩個是無效的JSON數據。詳細信息請參閱json.org

0

如上所述,只有數組和對象被允許在JSON的頂層。

也許在數組中包裝你的值將解決你的問題。

def set(value); @data = [value].to_json; end 
def get; JSON.parse(@data)[0]; end 
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 

也是如此MultiJson

require 'multi_json' 
p = MultiJson.load '1' 
# => 1 
p.class 
# => Fixnum 

所以,如提到的2800276,這必須是一個錯誤。


,但截至發稿時,紅寶石2的JSON使用load方法時有quirks_modeenabled by default

require 'json' 
p = JSON.load '1' 
# => 1 
p.class 
# => Fixnum 
0

從JSON就是最基礎:

  • 在JSON數據類型可以是:
    1. 字符串
    2. JSON對象...(等等)

Reference to see complete list of Json data types

  • 現在任何JSON數據必須在 'JSON對象' 在頂層被包封。
  • 爲了理解這是爲什麼,你可以看到,如果沒有頂層的Json對象,一切都會鬆動,你只能在整個Json中只有一種數據類型。即數字,字符串,數組,空值等等,但只有一個。
  • 'Json Object'類型具有固定格式'key':'value'對。
  • 您不能僅存儲該值。因此,您不能擁有像{1}之類的內容。 您需要輸入正確的格式,即'key':'value'對。
相關問題