Arrays Ruby中对象的变换数组

Arrays Ruby中对象的变换数组,arrays,ruby,json,Arrays,Ruby,Json,我有JSON,每个站点的流量有一个对象,持续3天 我想在“日期”将这三个对象合并在一起。下面的例子 我用的是Ruby。最简单的方法是什么 启动JSON: [ { "Google":[ { "Date":"2015-01-01", "Value":100 }, { "Date":"2015-02-01", "V

我有JSON,每个站点的流量有一个对象,持续3天

我想在“日期”将这三个对象合并在一起。下面的例子

我用的是Ruby。最简单的方法是什么

启动JSON:

 [  
   {  
      "Google":[  
         {  
            "Date":"2015-01-01",
            "Value":100
         },
         {  
            "Date":"2015-02-01",
            "Value":200
         },
         {  
            "Date":"2015-03-01",
            "Value":300
         }
      ]
   },
   {  
      "Yahoo":[  
         {  
            "Date":"2015-01-01",
            "Value":1200
         },
         {  
            "Date":"2015-02-01",
            "Value":1300
         },
         {  
            "Date":"2015-03-01",
            "Value":1400
         }
      ]
   },
   {  
      "Bing":[  
         {  
            "Date":"2015-01-01",
            "Value":500
         },
         {  
            "Date":"2015-02-01",
            "Value":600
         },
         {  
            "Date":"2015-03-01",
            "Value":700
         }
      ]
   }
]
[
  {  
    "Date":"2015-01-01",
    "Google":100,
    "Yahoo":1200,
    "Bing":500
  },
  {  
    "Date":"2015-01-02",
    "Google":200,
    "Yahoo":1200,
    "Bing":600
  },
  {  
    "Date":"2015-01-03",
    "Google":300,
    "Yahoo":1400,
    "Bing":700
  }
]
结束JSON:

 [  
   {  
      "Google":[  
         {  
            "Date":"2015-01-01",
            "Value":100
         },
         {  
            "Date":"2015-02-01",
            "Value":200
         },
         {  
            "Date":"2015-03-01",
            "Value":300
         }
      ]
   },
   {  
      "Yahoo":[  
         {  
            "Date":"2015-01-01",
            "Value":1200
         },
         {  
            "Date":"2015-02-01",
            "Value":1300
         },
         {  
            "Date":"2015-03-01",
            "Value":1400
         }
      ]
   },
   {  
      "Bing":[  
         {  
            "Date":"2015-01-01",
            "Value":500
         },
         {  
            "Date":"2015-02-01",
            "Value":600
         },
         {  
            "Date":"2015-03-01",
            "Value":700
         }
      ]
   }
]
[
  {  
    "Date":"2015-01-01",
    "Google":100,
    "Yahoo":1200,
    "Bing":500
  },
  {  
    "Date":"2015-01-02",
    "Google":200,
    "Yahoo":1200,
    "Bing":600
  },
  {  
    "Date":"2015-01-03",
    "Google":300,
    "Yahoo":1400,
    "Bing":700
  }
]

假设确实是这种结构,可能会起作用的是

results = [] 

your_array[0]['Google'].each_with_index do |item, index|
  date = item['Date']

  provider_values = your_array.inject({}) do |memo, current|
    provider = current.keys[0]
    value = current[provider][index]['Value']

    memo[provider] = value
    memo
  end 
  results.push({'Date' => date}.merge(provider_values))
end
我目前在Windows上,所以我不能100%确定正确性,但是修复任何语法错误应该很容易

result = array.inject({}) do | a, e | 
  site, data = e.first
  data.each do | x | 
    a[x[:Date]] ||= {}
    a[x[:Date]][site] = x[:Value]
  end
  a
end
提供一个以日期为键的哈希。可通过以下方式将其转换为阵列:

result.map { | k, v | v.update(:Date => k) }

我会在mongo中使用map reduce,但是如果你想在Ruby中使用,想想JSON parse/dumpI,我在这个问题上看不到任何JSON的东西。@undur_gongor作者提到他有一个JSON数据。@CodeGroover:但是所有呈现的数据都是纯Ruby数据(数组、哈希、字符串),没有JSON。你们都是对的:)-数据以JSON开头,然后我做了
JSON.parse
,所以是的,这个问题实际上只涉及哈希数组。JSON标记只是帮助那些希望合并类似JSON结构的人。而累积部分a[x[:Date]][site]?[x[:Date]][site]+=x[:Value]:x[:Value],并且目标结果是arrayalso,因此在JSON解析之后,它将键作为字符串而不是符号。@CodeGroover:您的array vs hash备注是对的。谢谢。对不起,当然没有积累,这只是一种转变。