如何将JSON转换为Ruby哈希

mzaanser  于 2023-06-22  发布在  Ruby
关注(0)|答案(5)|浏览(109)

我有一个JSON对象,它包含以下值:

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

我想在Ruby中循环它以获得键/值对。当我使用@each时,它不会遍历对象,因为它不是Ruby哈希形式:

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

如何将上面的JSON对象转换为Ruby哈希?

jdzmm42g

jdzmm42g1#

require 'json'
value = '{"key_1":"value_1", "key_2":"value_2"}'
puts JSON.parse(value) # => {"key_1"=>"value_1","key_2"=>"value_2"}
13z8s7eq

13z8s7eq2#

您还可以使用Rails的with_indifferent_access方法,以便可以使用符号或字符串访问正文。

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

然后

json[:val] #=> "test"

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

dwbf0jvd3#

JSON有一个[]方法,这使得从/到JSON的解码和编码变得非常容易和透明。
如果object是类似字符串的,则解析字符串并将解析结果作为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,并在其中将对象转换为Hash,然后对其使用to_json

2ekbmq32

2ekbmq324#

假设你有一个JSON散列挂在某处,要自动将其转换为类似WarHog的版本,请将JSON散列内容 Package 在%q{hsh}标记中。
这似乎会自动添加所有必要的转义文本,就像WarHog的答案一样。

vsikbqxv

vsikbqxv5#

你可以使用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]

相关问题