Конвертировать JSON в рубиновый хэш - PullRequest
126 голосов
/ 01 ноября 2011

У меня есть объект JSON со следующим значением:

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

Я хочу просмотреть его в Ruby, чтобы получить пары ключ-значение. Когда я использую @each, он не выполняет итерацию по объекту, потому что он не находится в хэш-форме ruby:

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

Как я могу преобразовать вышеупомянутый объект JSON в хэш Ruby?

Ответы [ 5 ]

236 голосов
/ 01 ноября 2011

А как насчет следующего фрагмента?

require 'json'
value = '{"val":"test","val1":"test1","val2":"test2"}'
puts JSON.parse(value) # => {"val"=>"test","val1"=>"test1","val2"=>"test2"}
26 голосов
/ 30 апреля 2017

Вы также можете использовать метод rails: with_indifferent_access , чтобы вы могли получить доступ к телу с помощью символов или строк.

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

затем

json[:val] #=> "test"

json["val"] #=> "test"
4 голосов
/ 16 июля 2012

Если у вас где-то висит хэш JSON, чтобы автоматически преобразовать его в нечто вроде версии WarHog, оберните содержимое хеша json в теги% q {hsh}.Кажется, это автоматически добавляет весь необходимый экранированный текст, как в ответе WarHog

3 голосов
/ 01 ноября 2011

Вы пробовали: http://flori.github.com/json/.

Если это не удастся, вы можете просто разобрать это?Если вас интересуют только массивы, то что-то, что можно разделить, будет довольно простым.N

0 голосов
/ 02 января 2019

Вы можете использовать гем nice_hash: 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...