[ruby] JSON을 Ruby 해시로 변환하는 방법

다음 값을 보유하는 JSON 객체가 있습니다.

@value = {"val":"test","val1":"test1","val2":"test2"}

키 / 값 쌍을 얻기 위해 루비에서 반복하고 싶습니다. 내가 사용할 때 @eachRuby 해시 형식이 아니기 때문에 객체를 반복하지 않습니다.

@value = {"val"=>"test","val1"=>"test1","val2"=>"test2"}

위의 JSON 객체를 Ruby 해시로 변환하려면 어떻게해야합니까?



답변

다음 스 니펫은 어떻습니까?

require 'json'
value = '{"val":"test","val1":"test1","val2":"test2"}'
puts JSON.parse(value) # => {"val"=>"test","val1"=>"test1","val2"=>"test2"}


답변

Rails의 with_indifferent_access방법을 사용 하여 기호 나 문자열로 본문에 액세스 할 수도 있습니다.

value = '{"val":"test","val1":"test1","val2":"test2"}'
json = JSON.parse(value).with_indifferent_access

그때

json[:val] #=> "test"

json["val"] #=> "test"


답변

어딘가에 JSON 해시가 걸려 있다고 가정하면,이를 자동으로 WarHog 버전과 같은 것으로 변환하려면 JSON 해시 컨텐츠를 %q{hsh}태그로 감싸십시오 .

이것은 WarHog의 답변과 같이 필요한 모든 이스케이프 된 텍스트를 자동으로 추가하는 것으로 보입니다.


답변

시도해 보셨습니까 : http://flori.github.com/json/ ?

실패하면 그냥 파싱 할 수 있습니까? 관심있는 배열이라면 위의 내용을 분리하는 것이 매우 간단합니다.


답변

아무도 JSON의 []방법을 지적하지 않아 놀랍습니다 .이를 통해 JSON에서 / JSON으로 디코딩하고 인코딩하는 것이 매우 쉽고 투명합니다.

객체가 문자열과 같은 경우 문자열을 구문 분석하고 구문 분석 된 결과를 Ruby 데이터 구조로 리턴하십시오. 그렇지 않으면 Ruby 데이터 구조 오브젝트에서 JSON 텍스트를 생성하여 리턴하십시오.

이걸 고려하세요:

require 'json'

hash = {"val":"test","val1":"test1","val2":"test2"} # => {:val=>"test", :val1=>"test1", :val2=>"test2"}
str = JSON[hash] # => "{\"val\":\"test\",\"val1\":\"test1\",\"val2\":\"test2\"}"

str이제 JSON 인코딩이 포함되어 있습니다 hash.

다음을 사용하여 쉽게 되돌릴 수 있습니다.

JSON[str] # => {"val"=>"test", "val1"=>"test1", "val2"=>"test2"}

to_s클래스에 대해 사용자 정의 객체를 정의 해야 하며 내부에서 객체를 해시로 변환 한 다음 사용 to_json하십시오.


답변

nice_hash gem을 사용할 수 있습니다 : https://github.com/MarioRuiz/nice_hash

require 'nice_hash'
my_string = '{"val":"test","val1":"test1","val2":"test2"}'

# on my_hash will have the json as a hash, even when nested with arrays
my_hash = my_string.json

# you can filter and get what you want even when nested with arrays
vals = my_string.json(:val1, :val2)

# even you can access the keys like this:
puts my_hash._val1
puts my_hash.val1
puts my_hash[:val1]


답변