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

问题描述 投票:2回答:2

我正在使用HTTParty 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)

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

有没有办法使用符号访问我的json数据?例如:

order_status[:link]
ruby-on-rails json ruby hash https
2个回答
6
投票

扰流警报:最佳选择是#3


选项1:您可以在Hash上调用.with_indifferent_access,以便能够使用'link':link访问值:

{'a' => 1}[:a]
# => nil
{'a' => 1}.with_indifferent_access[:a]
# => 1
{'a' => 1}.with_indifferent_access['a']
# => 1

选项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'}}

选项3:使用设置为symbolize_namestrue选项解析JSON

JSON.parse(string, symbolize_names: true)

0
投票

更深入地搜索,我找到了一种更简洁的方法来解决这个问题,例如:.symbolize_keys !,

order_status = JSON.parse(order.body).symbolize_keys![:status]

欲了解更多信息,请访问:https://apidock.com/rails/Hash/symbolize_keys%21

破坏性地将所有键转换为符号,只要它们响应to_sym。与symbolize_keys相同,但修改self。

© www.soinside.com 2019 - 2024. All rights reserved.