【问题标题】:Pretty, Rubified JSON keys漂亮的、Rubified JSON 键
【发布时间】:2014-08-07 22:27:29
【问题描述】:

获得漂亮的 Rubified 哈希键的最佳方法是什么?

即。 someKey 变为 some_key

  1. Hashie::Trash -- 不先定义每个键是不可能的,即。 property :some_key, from: :someKey -- 不是很漂亮。

  2. https://github.com/tcocca/rash -- 不幸的是breaks Hashie::Extensions::DeepFetch,我打算稍后使用它。

  3. Rails ActiveSupport's underscore -- 不清楚如何将其应用于我的用例。

现场演示应用:http://runnable.com/U-QJCIFvY2RGWL9B/pretty-json-keys

class MainController < ApplicationController
  def index
    @json_text = <<END
      ...
    END

    response = JSON.parse(@json_text)['products']

    @products = []
    response.each do |product|
      @products << product['salePrice']

      # Seeking the best way to make this say:

      # @products << product['sale_price']
    end
  end
end

【问题讨论】:

  • 你试过了吗?在 Rails 控制台中,"fooBar".underscore 对我来说很好。
  • 当然可以,但是如何将它应用到我的哈希值,以便使用它们的新名称解析它们?
  • 这个问题可能会有所帮助。 stackoverflow.com/questions/6210572/…
  • 使用您自己的哈希类或修补现有的,类似于无差别类的工作方式。
  • @DaveNewton 抱歉,你到底是什么意思?

标签: ruby-on-rails ruby json hash


【解决方案1】:

嗯,你总是可以转换成一个新的哈希:

def self.prettify(x)
  x.is_a?(Hash) ? Hash[ x.map{|k,v| [k.underscore, prettify(v)]} ] :
  x.is_a?(Array) ? x.map{|v| prettify(v) } : x
end

pretty_json_hash = prettify(JSON.parse(@json_text))

注意:如果你不能在这个级别编写代码,那么 Rails 将很难取得成功。

【讨论】:

  • 我无法让它工作。在 main_controller.rb 中,salePrice 有效,但 sale_price 无效:runnable.com/U-QJCIFvY2RGWL9B/pretty-json-keys
  • @MarkBoulder 该链接对我没有任何作用。您将不得不发布不起作用的代码,包括正在解析的 JSON。给定一个哈希值,上面的prettify 肯定会遍历它并转换所有的键。也许您的 JSON 中有一个列表?上面的代码不处理包含列表的嵌套。
  • 您无法访问 Runnable 吗?如果您可以访问它,您只需单击Run 按钮即可启动该应用程序。 main_controller.rb 应该可以在文件和文件夹树中轻松访问。
  • @MarkBoulder 好的,现在我明白了。正如我在上面提到的products 字段和其他几个字段都包含在数组中。我将添加代码来处理这种情况。
猜你喜欢
  • 2014-12-13
  • 2014-05-19
  • 2021-01-31
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 2017-11-03
相关资源
最近更新 更多