다음 값을 보유하는 JSON 객체가 있습니다.
@value = {"val":"test","val1":"test1","val2":"test2"}
키 / 값 쌍을 얻기 위해 루비에서 반복하고 싶습니다. 내가 사용할 때 @each
Ruby 해시 형식이 아니기 때문에 객체를 반복하지 않습니다.
@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]