文章目錄
jq 合併多個 json
之前筆記 使用 jq 達成覆寫相同 json key 的效果 紀錄到如何使用 jq 處理 json 讓 config 可以在不同環境有不同設定值,使用上沒遇到問題,只是最近想要強化部份資安流程,所以想要將敏感資訊抽出來管理,處理方式就會需要多 merge 一次:appsettings.json
+ appsettings.Prod.json
+ sre.Prod.json
原始 json
appsettings.json
{ "redisconnection": "localhost:6379, password=pass.123", "EnableHttps": false, "Env": "Default" }
appsettings.Prod.json
{ "EnableHttps": true, "Env": "prod" }
sre.Prod.json
{ "redisconnection": "192.168.80.3:7000,192.168.80.3:7001,192.168.80.3:7002,192.168.80.3:7003,192.168.80.3:7004,192.168.80.3:7005, password=Pa$$w0rd" }
預期輸出
{ "redisconnection": "192.168.80.3:7000,192.168.80.3:7001,192.168.80.3:7002,192.168.80.3:7003,192.168.80.3:7004,192.168.80.3:7005, password=Pa$$w0rd", "EnableHttps": true, "Env": "prod" }
基本環境說明
- macOS Ventura 13.4
- jq-1.6
使用方式
需要留意 json 檔案內容,不能有註解或是嚴格定義不能有
//
符號,會出現parse error: Invalid numeric literal at line x, column x
錯誤
語法 1:
jq -s ".[0] * .[1] * .[2]" file1.json file2.json file3.json
這是之前筆記 使用 jq 達成覆寫相同 json key 的效果 的延伸,概念就是直接加上第三個檔案
jq -s ".[0] * .[1] * .[2]" appsettings.json appsettings.Prod.json sre.Prod.json
語法 2:
jq -s add file1.json file2.json file3.json
這是從 How to merge multiple json files in a directory with jq or any tool? 看到的語法,簡單到覺得不可能 work XD
jq -s add appsettings.json appsettings.Prod.json sre.Prod.json
心得
經過上次 使用 jq 達成覆寫相同 json key 的效果 的經驗,我以為我已經對 jq 有初步認識,但小小的改變還是讓我苦手不已 @@”
當然個人功力不足是主因,但我覺得 ./jq 官方文件不是很完善也是問題,原本想要嘗試理解 語法2
的概念,但卻沒找到相關說明,或是我誤會了文件的內容,可能悟性還有待加強
參考資訊
文章作者 Yowko Tsai
上次更新 2023-07-31
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。