루비에서 JSON 문자열 파싱


359

Ruby에서 파싱하려는 문자열이 있습니다.

string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'

데이터를 추출하는 쉬운 방법이 있습니까?


22
JSON은 Ruby에서 직접 지원되며 Ruby v1.9.3 이상부터 사용되었으므로 오래된 것을 사용하지 않는 한 gem을 설치할 필요가 없습니다. require 'json'코드에서 간단히 사용 하십시오.
Tin Man

답변:


559

이것은 JSON (JavaScript Object Notation) 처럼 보입니다 . 다음 json_string과 같이 변수에 상주하는 JSON을 구문 분석 할 수 있습니다 .

require 'json'
JSON.parse(json_string)

이전 Ruby를 사용하는 경우 json gem 을 설치해야 할 수 있습니다 .


유스 케이스에 더 잘 맞는 다른 Ruby 용 JSON 구현도 있습니다.


32
또한 키를 심볼로 가져 오기 위해 symbolize_names 옵션을 true로 설정할 수 있습니다. 예 :JSON.parse(string, symbolize_names: true) #=> {key: :value}
Nando Sousa

31
JSON은 Ruby에서 직접 지원되며 Ruby v1.9.3 이상부터 사용되었으므로 오래된 것을 사용하지 않는 한 gem을 설치할 필요가 없습니다. require 'json'코드에서 간단히 사용 하십시오.
Tin Man

212

구문 분석 된 객체로 수행 할 작업으로 답변을 약간 확장하려면

# JSON Parsing example
require "rubygems" # don't need this if you're Ruby v1.9.3 or higher
require "json"

string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
parsed = JSON.parse(string) # returns a hash

p parsed["desc"]["someKey"]
p parsed["main_item"]["stats"]["a"]

# Read JSON from a file, iterate over objects
file = open("shops.json")
json = file.read

parsed = JSON.parse(json)

parsed["shop"].each do |shop|
  p shop["id"]
end

아주 잘 설명했다.
berto77

7
중요 사항 : '{ "a": "bob" }'유효합니다. "{ 'a': 'bob' }"아니다.
Ziggy

7
JSON은 문자열 주위에 큰 따옴표가 필요하기 때문에 @LinusAn. JSON 정의의 문자열 ( json.org )을 참조하십시오 . "문자열은 백 슬래시 이스케이프를 사용하여 큰 따옴표로 묶은 0 개 이상의 유니 코드 문자 시퀀스입니다."
endorama

1
대부분의 경우에 JSON.parse대한 구조 블록 내 에서 래핑하려고합니다 JSON::ParserError.
johnml

JSON.parse("[#{value}]")[0]오류를 피하기 위해A JSON text must at least contain two octets!
Rivenfall

39

Ruby v1.9.3부터 JSON을 구문 분석하기 위해 Gems를 설치할 필요가 없습니다 require 'json'.

require 'json'

json = JSON.parse '{"foo":"bar", "ping":"pong"}'
puts json['foo'] # prints "bar"

Ruby-Doc에서 JSON 을 참조하십시오 .


15

JSON 문자열처럼 보입니다. 많은 JSON 라이브러리 중 하나를 사용할 수 있으며 다음과 같이 간단합니다.

JSON.parse(string)

7

이것은 조금 늦었지만 기여하는 것이 중요해 보이는 흥미로운 것을 발견했습니다.

실수 로이 코드를 작성했으며 작동하는 것 같습니다.

require 'yaml'
CONFIG_FILE = ENV['CONFIG_FILE'] # path to a JSON config file 
configs = YAML.load_file("#{CONFIG_FILE}")
puts configs['desc']['someKey']

YAML 라이브러리를 사용하고 있기 때문에 작동하는 것을보고 놀랐지 만 작동합니다.

중요한 이유는 yamlRuby에 내장되어 있기 때문에 gem 설치가 없기 때문입니다.

1.8.x 및 1.9.x 버전을 사용하고 있으므로 json라이브러리가 내장되어 있지 않지만 버전 2.x에 있습니다.

기술적으로 이것은 2.0보다 낮은 버전의 데이터를 추출하는 가장 쉬운 방법입니다.


예, JSON은 실제로 Psych 코드에 의해 구문 분석되며 Ruby의 YAML도 구문 분석합니다. 그리고 JSON 파싱은 Ruby v1.9.3 에서 도입되었습니다 .
Tin Man

1
이것이 작동하는 이유는 의미 적으로 (대부분) JSON이 유효한 YAML (특히 YAML 1.2)이기 때문입니다.
Justin Ohms


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.