루비 lib의 JSON.load와 JSON.parse 메서드의 차이점은 무엇입니까?
루비 문서를 보면 알 수 있습니다.load
하고 method는 proc를 arg로 취득합니다.parse
그렇지 않다.른른른른른른른른른른?예를 들어 JSON 문자열이 있을 때 어떤 방법으로 루비 오브젝트로 변환하면 좋을까요?
load(source, proc = nill, options = {}) JSON 소스에서 루비 데이터 구조를 로드하여 반환합니다.소스는 문자열 모양 개체, IO 모양 개체 또는 읽기 메서드에 응답하는 개체 중 하나입니다.proc가 지정된 경우, 모든 nested Ruby 오브젝트와 함께 깊은 첫 번째 순서로 재귀적으로 인수로 호출됩니다.기본 옵션을 변경하려면 옵션 인수에도 전달합니다.이 메서드는 Marshal 및 YAML의 로드/덤프 인터페이스 구현의 일부입니다.복원이라고도 합니다.
parse(source, opts = {}) JSON 문서 원본을 Ruby 데이터 구조로 구문 분석하고 반환합니다.
JSON#parse
JSON 문자열을 루비 해시에 해석합니다.
JSON.parse('{"name": "Some Name"}') # => {"name" => "Some Name"}
JSON#load
또는 등)중를 Ruby Hash/합니다.
JSON.load File.new("names.json") # => Reads the JSON inside the file and results in a Ruby Object.
JSON.load '{"name": "Some Name"}' # Works just like #parse
합니다.#read
를 들어 다음과 같습니다예를 들어 다음과 같습니다.
class A
def initialize
@a = '{"name": "Some Name"}'
end
def read
@a
end
end
JSON.load(A.new) # => {"name" => "Some Name"}
중요한 차이점은 이다.JSON.load
할 수 없는 입력이 주어지면 하지 않습니다( 「할 수 없다」(「신뢰할 수 없다」)JSON.parse
(서양속담, 서양속담)이는 "일반" 해시, 문자열, 배열, 숫자 클래스 이외의 클래스를 인스턴스화하는 방법을 제공하기 때문입니다.
class Foo
def self.json_creatable?
true
end
def self.json_create attributes
puts "called with #{attributes}"
end
end
JSON.parse('{"json_class": "Foo"}') #=> {"json_class"=>"Foo"}
반면에.
JSON.load('{"json_class": "Foo"}')
called with {"json_class"=>"Foo"}
#=> nil
이것은 데이터의 커스텀시리얼라이제이션 실장을 목적으로 하고 있습니다.와이드 월드의 데이터를 해석할 때는 사용하지 말아 주세요. ''은 .json_creatable?
★★★★★★★★★★★★★★★★★」json_create
실제로 , 하거나 실행하지 하십니까?그러나, 당신의 의존관계 중 어느 것도 이것을 행하거나 실행하지 않는다고 얼마나 확신하십니까?method_missing
오용될 수 있는 방법으로요? (예: 악용 사례 참조).그 결과JSON.load
&JSON.parse
상당히 강화되었습니다.)
「」를 사용합니다.JSON.parse
할 수 없는 또는 하지 않은 JSON.load
하나 점은 또 one one one one one one one one one one one one one one one one 。JSON.load
는 디폴트로 단일 값(개체 및 배열 아님)을 해석합니다.
JSON.load("false")
=> false
JSON.load("123")
=> 123
★★★★★★★★★★★★★★★★★.JSON.parse
에는 「」가 필요합니다.quirks mode
을 사용법
JSON.parse("false")
JSON::ParserError: 757: unexpected token at 'false'
JSON.parse("false", quirks_mode: true)
=> false
서 ★★★★load
소스코드는 나를 클릭한다.
# File ext/json/lib/json/common.rb, line 323
def load(source, proc = nil, options = {})
opts = load_default_options.merge options
if source.respond_to? :to_str
source = source.to_str
elsif source.respond_to? :to_io
source = source.to_io.read
elsif source.respond_to?(:read)
source = source.read
end
if opts[:allow_blank] && (source.nil? || source.empty?)
source = 'null'
end
result = parse(source, opts)
recurse_proc(result, &proc) if proc
result
end
메서드 내의 첫 번째 행:
opts = load_default_options.merge options
전화할 수 있습니다.JSON#load_default_options
콘솔:
JSON.load_default_options
=> {:max_nesting=>false, :allow_nan=>true, :quirks_mode=>true, :create_additions=>true}
디폴트 옵션은 4가지가 있습니다.이것들의 의미는 여기서 얻을 수 있다는 것입니다.클릭해주세요.
- max_max:구문 분석된 데이터 구조에서 허용되는 중첩의 최대 깊이입니다.:max_deach => false를 사용하여 깊이 체크를 비활성화합니다.기본값은 100 입니다./
- allow_nan: true로 설정되어 있는 경우 RFC 7159에 관계없이 NaN, Infinity 및 -Infinity를 파서로 해석할 수 있습니다.이 옵션은 기본적으로 false입니다.
- symbol_names:true로 설정하면 JSON 개체의 이름(키)에 대한 기호를 반환합니다.그렇지 않으면 문자열이 반환됩니다.기본값은 문자열입니다.
- create_create:false로 설정하면 일치하는 클래스와 create_id가 발견되더라도 파서는 추가를 만들지 않습니다.이 옵션은 기본적으로 false입니다.
- object_class:디폴트: 해쉬
- array_class:디폴트로는 어레이
왜죠
참조JSON#parse
, 의 소스 코드를 참조합니다.JSON#load
세 번째 줄부터 마지막 줄까지,result = parse(source, opts)
,그렇게load
사실은parse
4가지 기본 옵션이 있습니다.
그 이유는 다음과 같습니다.
JSON.load("123") #=> 123
JSON.parse("123", quirks_mode: true) #=> 123
다른 방법으로 해석할 대상이 응답하는 경우to_io
의미는 파일,load
그래도 말이 되네단, 해석은 하지 않습니다.
또 다른 차이점은 다른 옵션입니다.
일반적인 사용 예(주)_keys
대._names
):
JSON.load '{"key": "val"}', symbolize_keys: true
=> {"key" => "val"} # parse option syntax silently ignored
JSON.parse '{"key": "val"}', symbolize_keys: true
=> {:key => "val"} # symbols, yay!
JSON.load '{"key": "val"}', symbolize_names: true
=> {:key => "val"} # using the correct syntax for load
언급URL : https://stackoverflow.com/questions/17226402/whats-the-difference-between-json-load-and-json-parse-methods-of-ruby-lib
'programing' 카테고리의 다른 글
HTTP 기본 인증을 위한 순수 JavaScript 코드입니까? (0) | 2023.03.27 |
---|---|
D3 - JSON 데이터 구조를 다루는 방법 (0) | 2023.03.27 |
각도 JS 스케일링과 퍼포먼스 (0) | 2023.03.27 |
객체 배열에 대한 JSON 스키마 정의 (0) | 2023.03.27 |
오류: [$injector:unpr] 알 수 없는 공급자: $routeProvider (0) | 2023.03.27 |