2016-07-30 2 views
2

잠시 동안 JSON.parse를 사용했으며 방금 최신 버전으로 업데이트했습니다.`JSON.parse`가 예외를 던지지 않는 이유는 무엇입니까?

다음 오류가 발생합니다.

ParserError를 던지는 대신 nil을 반환하도록 기능이 업데이트 되었습니까? 당신이 밖으로 확인하여 확인할 수 있습니다 기능을 것으로 예상된다 JSON.parse("null")nil를 반환, 그래서

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.

:

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을 준수하도록 업데이트되었습니다 tests for parsing single values.

+0

[버그 리포트] (https://bugs.ruby-lang.org/issues/10143)는 RFC 7159에 부합하지만'JSON :: ParserError :'오류를 발생시키는 일부'parse' 표현을 기술하고 있습니다. JSON.parse ('this is a string'),'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) 모든 값을 루비 문자열로 전달해야하므로 입력 형식을 지정하는 방법을 알려줍니다. IRB를 열고 다음을 테스트합니다 :'JSON.parse (this is string " ') =>"이것은 문자열 ",'JSON.parse ('42') => 42','JSON.parse ('true') => '를 선택하십시오. –

+0

이해합니다. 감사. –

관련 문제