Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将密钥替换为_json?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

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:

    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:

    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)]
    如果散列条目可能以不同的顺序插入。