如何使用符号通过HTTParty访问JSON响应?

Gab*_*ita 3 ruby hash https json ruby-on-rails

我正在使用HTTPparty gem在Rails应用程序中发送请求。这是一个例子:

order = HTTParty.get("https://sandbox.moip.com.br/v2/payments/#{o.payment_id}",
                headers: {"Authorization" => "Basic #{encode_auth_token}"})

order_status = JSON.parse(order.body)
Run Code Online (Sandbox Code Playgroud)

变量order接收一个json作为响应。我设法检索了所需的信息,但我想使用符号而不是字符串来访问json数据。

有什么方法可以使用符号访问我的json数据吗?例如:

order_status[:link]
Run Code Online (Sandbox Code Playgroud)

MrY*_*iji 6

剧透警报:最佳选择是#3


选项1:您可以调用.with_indifferent_access哈希,以使用'link'或来访问值:link

{'a' => 1}[:a]
# => nil
{'a' => 1}.with_indifferent_access[:a]
# => 1
{'a' => 1}.with_indifferent_access['a']
# => 1
Run Code Online (Sandbox Code Playgroud)

选项2:在散列上调用.symbolize_keys(或.deep_symbolize_keys如果您也要符号化嵌套键)将所有键转换为符号:

hash = { 'name' => 'Rob', 'address' => { 'postal_code' => '92210' } }
hash.symbolize_keys
# => {:name=>"Rob", :address=>{'postal_code'=>'92210'}}
hash.deep_symbolize_keys
# => {:name=>"Rob", :address=>{:postal_code=>'92210'}}
Run Code Online (Sandbox Code Playgroud)

选项3:使用symbolize_names设置为的选项解析JSONtrue

JSON.parse(string, symbolize_names: true)
Run Code Online (Sandbox Code Playgroud)