如何使用Ruby将嵌套字符串哈希转换为符号哈希?

3
服务器使用返回嵌套数据结构的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]


1
有一个deep_symbolize_keys方法 - 正是为了这些目的而存在的 ;) - Andrey Deineko
@AndreyDeineko,那是针对rails的。问题是关于ruby的。 - abhijit
1个回答

3

1
我已经尝试过 symbolize_keys,但它只能将第一层键转换为符号。 - XY Li
@LiXinyang,你尝试过给JSON.parse传递参数以将其转换为符号键吗? - Coolness
1
谢谢,deep_symbolize_keys 可以完成任务。不知道是否有纯 Ruby 的解决方案。 - XY Li
1
根据这个答案 https://dev59.com/2WAf5IYBdhLWcg3wMwM9,你可以使用`JSON.parse`上的`symbolize_names`参数来完成它,如果你包括`json`,我猜那是纯Ruby? - Coolness

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接