代码之家  ›  专栏  ›  技术社区  ›  Gabriel Mesquita

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

  •  5
  • Gabriel Mesquita  · 技术社区  · 7 年前

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

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

    order_status[:link]
    
    2 回复  |  直到 7 年前
        1
  •  9
  •   MrYoshiji    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
    

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

    使用 symbolize_names 选项设置为 true

    JSON.parse(string, symbolize_names: true)
    
        2
  •  0
  •   Gabriel Mesquita    7 年前

    通过深入搜索,我找到了一种更简洁的方法来解决这个问题。符号化_键!,例如:

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

    https://apidock.com/rails/Hash/symbolize_keys%21