Json

合併多個 JSON 文件,按欄位刪除重複對象

  • May 21, 2020

我正在嘗試合併具有單個對象的數十萬個 JSON 文件。在這個答案的幫助下,我成功地將所有對像作為數組添加到單個對像中。現在,如果特定欄位或參數重複,我想在合併期間過濾掉一些對象。類似field 1兩個對象的東西具有相同的值。

這是範例

輸入文件 1:

[
   {
     "field 1": 10,
     "field 2": 25,
     "field 3": 35,
     "field 4": 45
   }
]

輸入文件 2:

[
   {
     "field 1": 15,
     "field 2": 25,
     "field 3": 35,
     "field 4": 45
   }
]

輸入文件 3:

[
   {
     "field 1": 10,
     "field 2": 20,
     "field 3": 30,
     "field 4": 40
   }
]

預期輸出:

[
   {
     "field 1": 10,
     "field 2": 25,
     "field 3": 35,
     "field 4": 45
   },
   {
     "field 1": 15,
     "field 2": 25,
     "field 3": 35,
     "field 4": 45
   }
]

由於field 1值相同,文件 3 對像不會合併

您只需使用unique_by()函式,jq其中需要一個對像數組並將欄位名稱作為輸入以刪除重複項

jq -n '[ inputs[] ] | unique_by(."value 1")'

要在我的其他答案之上附加以基於一個欄位進行唯一選擇並通過另一個欄位刪除對象,您可以在下面執行此操作。下面的程式碼對對象進行分組,排除基於重複項的對象,"value 1"並排除包含的對象"value 6"

jq -n '[ [inputs[]] | unique_by(."value 1")[] | select( has("value 6") | not )]  '

引用自:https://unix.stackexchange.com/questions/588098