如何替换to_json中的键?

时间:2012-01-20 00:10:46

标签: ruby-on-rails ruby activerecord

我正在覆盖to_json

当我在模型上调用to_json时,我得到以下内容:

{ "integer1": "23", "integer2": "2", "integer3": "4", ... }

我希望to_json返回:

{ "Something": "23", "SomethingElse": "2", "AnotherThing": "4", ... }

我有一个包含密钥及其映射的数组:

"integer1" => "Something", "integer2" => "SomethingElse", "integer3" => "AnotherThing", ....

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:4)

  1. 转换model instance into a hash
  2. 将哈希转换为您想要的内容:

    h1 = { "integer1" => "23", "integer2" => "2", "integer3" => "4" }
    h2 = { "integer1" => "Something", "integer2" => "SomethingElse", "integer3" => "AnotherThing" }
    desired = Hash[ h1.map{ |k,v| [ h2[k], v ] } ]
    
  3. 从中获取您的JSON:

    json = desired.to_json
    

答案 1 :(得分:2)

我强烈建议使用draper或类似的装饰器模式解决方案来创建对象的“JSON视图”。

您将拥有模型的装饰器,您可以在其上定义def as_json(options = {})并返回要用作模型的JSON表示的数据的哈希值。这将它与模型分离,并允许您轻松地从数据的内部表示中修改模型的“数据视图”。