Arrays Ruby中对象的变换数组
我有JSON,每个站点的流量有一个对象,持续3天 我想在“日期”将这三个对象合并在一起。下面的例子 我用的是Ruby。最简单的方法是什么 启动JSON:Arrays Ruby中对象的变换数组,arrays,ruby,json,Arrays,Ruby,Json,我有JSON,每个站点的流量有一个对象,持续3天 我想在“日期”将这三个对象合并在一起。下面的例子 我用的是Ruby。最简单的方法是什么 启动JSON: [ { "Google":[ { "Date":"2015-01-01", "Value":100 }, { "Date":"2015-02-01", "V
[
{
"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备注是对的。谢谢。对不起,当然没有积累,这只是一种转变。