Ruby on rails 如何将密钥替换为_json?
我正在将Ruby on rails 如何将密钥替换为_json?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在将重写为_json 当我在我的模型上调用到_json时,我得到以下结果: { "integer1": "23", "integer2": "2", "integer3": "4", ... } 我想返回_json返回: { "Something": "23", "SomethingElse": "2", "AnotherThing": "4", ... } 我有一个包含键及其映射的数组: "integer1" => "Something", "integer2" => "S
重写为_json
当我在我的模型上调用到_json
时,我得到以下结果:
{ "integer1": "23", "integer2": "2", "integer3": "4", ... }
我想返回_json
返回:
{ "Something": "23", "SomethingElse": "2", "AnotherThing": "4", ... }
我有一个包含键及其映射的数组:
"integer1" => "Something", "integer2" => "SomethingElse", "integer3" => "AnotherThing", ....
如何实现这一点?我极力主张使用或类似的decorator模式解决方案来创建对象的“JSON视图”
您的模型将有一个decorator,在该decorator上定义def为_json(options={})
,并返回要用作模型json表示的数据哈希。这将它与模型分离,并允许您轻松地将模型的“数据视图”与数据的内部表示分开进行修改。我极力主张使用或类似的装饰器模式解决方案来创建对象的“JSON视图”
您的模型将有一个decorator,在该decorator上定义def为_json(options={})
,并返回要用作模型json表示的数据哈希。这将使其与模型分离,并允许您轻松地将模型的“数据视图”与数据的内部表示分开进行修改
h1 = { "integer1" => "23", "integer2" => "2", "integer3" => "4" }
h2 = { "integer1" => "Something", "integer2" => "SomethingElse", "integer3" => "AnotherThing" }
desired = Hash[ h1.map{ |k,v| [ h2[k], v ] } ]
json = desired.to_json
h1 = { "integer1" => "23", "integer2" => "2", "integer3" => "4" }
h2 = { "integer1" => "Something", "integer2" => "SomethingElse", "integer3" => "AnotherThing" }
desired = Hash[ h1.map{ |k,v| [ h2[k], v ] } ]
json = desired.to_json
您使用的Rails版本是什么?最后一个不是数组,而是散列,对吗?@Phrogz,其实它是一个包含这些信息的对象。@c0deNinja所以您有一个对象,您称之为数组,并显示为散列?考虑到这样的不精确的细节使得它很难帮助你。@ Phrogz,很抱歉,但是我可以把这个对象变成哈希,或者根据需要做任何其他的事情。我认为只要我能像我所展示的那样创建映射,对象就无关紧要了。你使用的Rails版本是什么?最后一个不是数组,而是散列,对吗?@Phrogz,其实它是一个包含这些信息的对象。@c0deNinja所以你有一个对象,你称之为数组,并显示为散列?考虑到这样的不精确的细节使得它很难帮助你。@ Phrogz,很抱歉,但是我可以把这个对象变成哈希,或者根据需要做任何其他的事情。我认为只要我能像我所展示的那样创建一个映射,对象就不重要了。作为替代方法,你可以做
Hash[h2.values.zip(h1.values)]
或Hash[h2.values\u at(*h1.keys.zip.values)]
如果有可能的话,哈希条目会以不同的顺序插入。作为替代方法,你可以做Hash[h2.values.zip](h1.values)]
或散列[h2.values\u at(*h1.keys).zip(h1.values)]
如果散列条目可能以不同的顺序插入。