服务器正在使用JSON API,它返回一个嵌套的数据结构。我试图使用JSON.parse
解析它,但默认情况下它会将json字符串转换为字符串哈希。
示例数据
{
"data"=>
{
"id"=>"1",
"type"=>"users",
"attributes"=>
{
"email"=>"tia_heller@lebsack.info",
"name"=>"Tanner Kreiger"
}
}
}
我在下面尝试了代码,但它只转换了一个级别(不是儿童哈希)
def json_body
str_hash = JSON.parse(response.body)
str_hash.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
end
我也尝试过来自Rails的symbolize_keys
,它也只转换第一级(参见:data
,其余的相同),
{:data=>{"id"=>"1", "type"=>"users", "attributes"=>{"email"=>"darrion_hackett@weberharvey.io", "name"=>"Cleo Braun"}}}
将嵌套字符串哈希递归转换为符号哈希的最佳方法是什么?
期望的结果
可以使用符号访问所有值,例如json_response[:data][:attributes]
。
答案 0 :(得分:3)
只需使用
JSON.parse(result, symbolize_keys: true)
更多信息http://apidock.com/ruby/JSON/parse
或哈希本身
hash = { 'name' => 'Rob', 'age' => '28' }
hash.symbolize_keys
# => {:name=>"Rob", :age=>"28"}
http://apidock.com/rails/Hash/symbolize_keys
这些似乎并不是递归地做到的。
Rails中还有deep_symbolize_keys!
http://api.rubyonrails.org/classes/Hash.html#method-i-deep_symbolize_keys