2016-07-30 129 views
2

我們已經使用JSON.parse一段時間了,我們只是更新到最新版本。爲什麼`JSON.parse`不拋出異常?

我們收到以下錯誤消息。

是否已將功能更新爲返回nil而不是拋出ParserError?

2.3.0 :001 > gem 'json', '2.0.2' 
=> true 
2.3.0 :002 > require 'json' 
=> true 
2.3.0 :003 > JSON.parse("null") 
=> nil 

2.3.0 :001 > gem 'json', '1.8.3' 
=> true 
2.3.0 :003 > require 'json' 
=> true 
2.3.0 :004 > JSON.parse("null") 
JSON::ParserError: 784: unexpected token at 'null' 
    from /Users/ryannealmes/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/json/common.rb:156:in `parse' 
    from /Users/ryannealmes/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/json/common.rb:156:in `parse' 
    from (irb):4 
    from /Users/ryannealmes/.rvm/rubies/ruby-2.3.0/bin/irb:11:in `<main>' 
2.3.0 :005 > 

回答

5

的功能已經更新,以符合JSON specification according to RFC 7159,它說:

A JSON value MUST be an object, array, number, or string, or one of the following three literal names:

false null true 

The literal names MUST be lowercase. No other literal names are allowed.

所以,JSON.parse("null")返回nil預期的功能,您可以通過檢查確認tests for parsing single values

+0

這個[bug報告](https://bugs.ruby-lang.org/issues/10143)指出符合RFC 7159的一些'parse'表達式,但引發了'JSON :: ParserError:'錯誤。我確認'JSON.parse('這是一個字符串')','JSON.parse(42)'和'JSON.parse(true)'都引發異常(對於Ruby 2.3.0/JSON 2.0.2 :) ,但'JSON.parse(「null」)#=> nil' –

+0

@CarySwoveland檢查[測試套件的鏈接](https://github.com/flori/json/blob/master/tests/json_parser_test.rb #L43)如何格式化輸入,因爲所有值都需要作爲Ruby字符串傳入。打開IRB並測試以下內容:'JSON.parse('「這是一個字符串」')=>「這是一個字符串」',''JSON.parse('42')=> 42','JSON.parse ('true')=> true'。 –

+0

我明白了。謝謝。 –

相關問題