【问题标题】:Turning JSON keys into symbols将 JSON 键转换为符号
【发布时间】:2015-03-02 18:43:07
【问题描述】:

我对 API 主题真的很陌生。我已经从 API 中展示了 JSON,阅读了大量文档,并且我了解如何将 JSON 密钥转换为 ruby​​ 符号的想法,但我不明白如何实际去做。我试过了……

1) 一种使用法拉第的方式。
2) 使用 JSON.parse
3) 使用 symbolize_keys: true

...和其他东西。

我的代码现在的样子。我还评论了我尝试的方式,所以你可以看到。

class ProductsController < ApplicationController

require 'json'

  def index
    @products = Product.find(:all)   # GET 'http://api.example.com/store/products.json'

    products = Faraday.new(:url => 'http://api.example.com') do |faraday|
     faraday.request :url_encoded
     faraday.response :logger
     faraday.adapter Faraday.default_adapter
    end

   #GET

    response = products.get '/store/products.json'
    response.body

    products.get '/store', { :name => 'Koala' }

    # @products = JSON.parse(@products, symbolize_keys: true)

  end
end

当前的输出只是一个 JSON 字符串。我该如何解析这个?

Flowers99.0Guitar10.99Love20.0Penguin500.0Koala1000.0[...]

HTML

= @products.each do |product|
    tr
      td = product.name
      td = product.price

【问题讨论】:

  • 你试过deep_symbolize_keys吗?还有 Rashify Faraday middleware 组件可以减少这个问题。
  • @tadman 不。symbolize_keys 不应该也能正常工作吗? hash@products = {},如果我理解正确的话,对吧?
  • symbolize_keys 只执行最上面的键。也许您也在寻找要转换的嵌套键,或者您正在寻找就地 symbolize_keys! 方法。
  • @tadman 真的,我不知道。你能写下我应该如何实际找到哈希,然后用这些方法中的任何一种来符号化它们。还有symbolize_keys!方法似乎已被弃用或移至某处。
  • 刚刚搬家了。简单使用:hash.deep_symbolize_keys!。试试这些,它们的用法应该很明显了。

标签: ruby-on-rails json api


【解决方案1】:

使用symbolize_names 而不是symbolize_keyssymbolize_keys 是 Rails 方法。

方法如下:

JSON.parse(@products, symbolize_names: true)

更多信息见:

JSON.parse

ActiveSuport::Hash#symbolize_keys

【讨论】:

    【解决方案2】:

    如果您使用的是 faraday-middleware gem,您可以在初始化连接时传递解析器选项,如下所示:

    Faraday.new(:url => 'http://api.example.com') do |faraday|
     faraday.request :url_encoded
     faraday.response :json, parser_options: { symbolize_names: true }
    end
    

    这将为您在调用 response.body 时提供符号化的键

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 2022-12-09
      • 2013-02-01
      • 2020-08-30
      相关资源
      最近更新 更多