簡體   English   中英

使用 jq 將兩個 JSON 數組合並到一個文件中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM