簡體   English   中英

使用bash腳本合並JSON文件

[英]Merging JSON files using a bash script

我是新手來編寫腳本。 我試圖編寫一個合並多個json文件的腳本。 例如:

檔案1:

{
  "file1": {
     "foo": "bar"
  }
}

文件2:

{
  "file1": {
     "lorem": "ipsum"
  }
}

合並文件:

{
  "file1": {
    "foo": "bar"
  },
  "file2": {
    "lorem": "ipsum"
  }
}

這就是我想出的:

awk 'BEGIN{print "{"} FNR > 1 && last_file == FILENAME {print line} FNR == 1 {line = ""} FNR==1 && FNR != NR {printf ","} FNR > 1 {line = $0} {last_file = FILENAME} END{print "}"}' json_files/* > json_files/all_merged.json

它有效,但我覺得有更好的方法。 有任何想法嗎?

使用awk處理JSON並不是一個非常好的主意。 無意義的空白中的任意更改將破壞您的代碼。 相反,使用jq ; 這是為了這種事情。 要組合兩個對象,請使用*運算符,即兩個文件:

jq -s '.[0] * .[1]' file1.json file2.json

對於任意多個文件,使用reduce將其順序應用於所有文件:

jq -s 'reduce .[] as $item ({}; . * $item)' json_files/*

-s開關使jq在處理之前將JSON文件的內容讀入大型數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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