2016-07-30 132 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

我明白了。谢谢。 –

相关问题