マージしようとしている 2 つの json ファイルがあります。JSON の形式は異なります (以下を参照)。レコードをマージしたいので、ファイル 1 の [0] とファイル 2 の [0] は、マージされた新しいファイルでは 1 つのレコード [0] になります。
最初の JSON (file_a.json) は次のようになります。
{
"query": {
"count": 4,
"created": "2012-11-21T23:07:00Z",
"lang": "en-US",
"results": {
"quote": [
{
"Name": "Bill",
"Age": "46",
"Number": "3.55"
},
{
"Name": "Jane",
"Age": "33",
"Number": nil
},
{
"Name": "Jack",
"Age": "55",
"Number": nil
},
{
"Name": "Xavier",
"Age": nil,
"Number": "153353535"
}
]
}
}
}
2 番目の JSON (file_b.json) は次のようになります。
[
{
"Number2": 25253,
"Number3": 435574,
"NAME": "Bill"
},
{
"Number2": 345353,
"Number3": 5566,
"NAME": "Jane"
},
{
"Number2": 56756,
"Number3": 232435,
"NAME": "Jack"
},
{
"Number2": 7457,
"Number3": 45425,
"NAME": "Xavier"
}
]
両方の JSON で同じキーはありません (実際には「名前」は両方のキーですが、最初のキーは「名前」で、2 番目のキーは「NAME」です。正しく動作するため、最終的な JSON に「Name」と「NAME」が必要です)、最初のファイルの最初のレコードは 2 番目のファイルの最初のレコードと一致します。
これまでのところ、次のようにマージしてみました。
merged = %w[a b].inject([]) { |m,f| m << JSON.parse(File.read("file_#{f}.json")) }.flatten
しかし、これはもちろんそれらをマージしましたが、私が望んでいた方法ではありませんでした(それらは連続してマージされ、フォーマットが異なるため、かなり醜くなります)。
私もこのようにマージしようとしました:
a = JSON.parse(File.read("file_a.json"))
b = JSON.parse(File.read("file_b.json"))
merged = a.zip(b)
近づいてきましたが、まだ正しくなく、フォーマットは依然として恐ろしいものでした.
最後に、私が欲しいのはこれです(2番目のJSONのフォーマット - 最初のJSONからのヘッダーをジャンクすることができます):
[
{
"Name": "Bill",
"Age": 46,
"Number": 3.55,
"Number2": 25253,
"Number3": 435574,
"NAME": "Bill"
},
{
"Name": "Jane",
"Age": 33,
"Number": nil,
"Number2": 345353,
"Number3": 5566,
"NAME": "Jane"
},
{
"Name": "Jack",
"Age": 55,
"Number": nil,
"Number2": 56756,
"Number3": 232435,
"NAME": "Jack"
},
{
"Name": "Xavier",
"Age": nil,
"Number": 153353535,
"Number2": 7457,
"Number3": 45425,
"NAME": "Xavier"
}
]
どんな助けでも大歓迎です。どうもありがとう。