服务器正在使用返回嵌套数据结构的 JSON API。我尝试使用 JSON.parse
解析它,但默认情况下它将 json 字符串转换为字符串哈希。
样本数据
{
"data"=>
{
"id"=>"1",
"type"=>"users",
"attributes"=>
{
"email"=>"[email protected]",
"name"=>"Tanner Kreiger"
}
}
}
我试过下面的代码,但它只转换一级深(不是 child 哈希)
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"=>"[email protected]", "name"=>"Cleo Braun"}}}
将嵌套字符串哈希递归转换为符号哈希的最佳方法是什么?
期望结果
所有的值都可以使用符号访问,比如
json_response[:data][:attributes]
。 最佳答案
只需使用
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
关于ruby - 如何使用Ruby将嵌套字符串哈希转换为符号哈希?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42328266/