将json转换为ruby哈希

ver*_*ure 129 ruby json hashmap

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

@value = {"val":"test","val1":"test1","val2":"test2"}
Run Code Online (Sandbox Code Playgroud)

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

@value = {"val"=>"test","val1"=>"test1","val2"=>"test2"}
Run Code Online (Sandbox Code Playgroud)

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

War*_*Hog 241

以下片段怎么样?

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

  • `value ='{"val":"test","val1":"test1","val2":"test2"}'`可能更具可读性. (7认同)

小智 31

您还可以使用ruby的方法:with_indifferent_access,这样您就可以使用符号或字符串访问正文.

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

然后

json[:val] #=> "test"

json["val"] #=> "test"
Run Code Online (Sandbox Code Playgroud)

  • 感谢`.with_indifferent_access` (2认同)

the*_*Man 7

我很惊讶没有人指出 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\"}"
Run Code Online (Sandbox Code Playgroud)

str现在包含 JSON 编码hash

使用以下方法很容易反转它:

JSON[str] # => {"val"=>"test", "val1"=>"test1", "val2"=>"test2"}
Run Code Online (Sandbox Code Playgroud)

需要to_s为该类定义自定义对象,并在其内部将对象转换为哈希,然后使用to_json它。


bou*_*uby 5

假设您在某个地方有一个 JSON 哈希,要自动将其转换为类似 WarHog 的版本,请将 JSON 哈希内容包装在%q{hsh}标签中。

这似乎会自动添加所有必要的转义文本,就像 WarHog 的答案一样。