[英]Combine two JSON arrays in a single file using jq
我有一個包含兩個數組的 JSON 文件。 我想將數組組合成一個對象數組,每個對象包含來自每個原始數組的一個元素。
JSON 輸入如下所示:
{
"en": [
"E1",
"E2",
"E3",
"E4"
],
"fr": [
"F1",
"F2",
"F3",
"F4"
]
}
期望的輸出:
[
{ "en":"E1", "fr":"F1"},
{ "en":"E2", "fr":"F2"},
{ "en":"E3", "fr":"F3"},
{ "en":"E4", "fr":"F4"}
]
無論我嘗試什么,我都無法馴服 jq 來實現它。 我最接近的是使用 filter . | {en:.en[],fr:.fr[]}
. | {en:.en[],fr:.fr[]}
. | {en:.en[],fr:.fr[]}
這給了我每個可能的數組配對,如下所示:
{
"en": "E1",
"fr": "F1"
}
{
"en": "E1",
"fr": "F2"
}
{
"en": "E1",
"fr": "F3"
}
{
"en": "E1",
"fr": "F4"
}
{
"en": "E2",
"fr": "F1"
}
{
"en": "E2",
"fr": "F2"
}
{
"en": "E2",
"fr": "F3"
}
{
"en": "E2",
"fr": "F4"
}
{
"en": "E3",
"fr": "F1"
}
{
"en": "E3",
"fr": "F2"
}
{
"en": "E3",
"fr": "F3"
}
{
"en": "E3",
"fr": "F4"
}
{
"en": "E4",
"fr": "F1"
}
{
"en": "E4",
"fr": "F2"
}
{
"en": "E4",
"fr": "F3"
}
{
"en": "E4",
"fr": "F4"
}
我怎樣才能讓它配對每個數組的第一個元素,第二個元素等。
您還可以使用transpose
將數組“壓縮”在一起:
[[.en,.fr] | transpose[] | {en:.[0], fr:.[1]} ]
我使用 range() 迭代數組的元素:
jq '[range(.en|length) as $i | {en: .en[$i], fr: .fr[$i]}]' file.json
這是一個可以使用任意多個鍵並且不需要事先知道鍵名的解決方案:
def objectify($keys):
[$keys, .] | transpose | map({(.[0]): .[1]}) | add;
keys_unsorted as $keys
| [[.[]] | transpose[] | objectify($keys)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.