最近在陪著弄 nodejs 的東西
有個任務就是隨著不同環境就 deploy 不同設定
這要是普通的檔案就簡單了
可是 nodejs 是 json 格式的
瞎攪和是不行的
我們有以下原始資料 origin.json
{ "key_c": { "key_c_b": "value_c_b", "key_c_a": "value_c_a" }, "key_b": { "key_b_a": "value_b_a" }, "key_a": "value_a" }
然後想要修改的資料 modify.json
{ "key_d": "new_value_d", "key_c": { "key_c_c": "add_value_c_b", "key_c_a": "modify_value_c_a" }, "key_b": { "key_b_b": "add_value_b_a" }, "key_a": "modify_value_a" }
一開始一直在琢磨 jq 的方法
摸來摸去最多也只做得到
jq -s add modify.json origin.json { "key_d": "new_value_d", "key_c": { "key_c_b": "value_c_b", "key_c_a": "value_c_a" }, "key_b": { "key_b_a": "value_b_a" }, "key_a": "value_a" }
有值的都無法覆蓋
好吧,其實上面的方法是錯的
應該要是指令反過來比較趨近我們想要的
jq -s add origin.json modify.json { "key_d": "new_value_d", "key_c": { "key_c_c": "add_value_c_b", "key_c_a": "modify_value_c_a" }, "key_b": { "key_b_b": "add_value_b_a" }, "key_a": "modify_value_a" }
這也不對啊,原本的值都不見了,而我只想修改某些項目
後來找到了這個方法,安裝 npm 的 json
npm install -g json
之後就可以用 json 來處理這個問題了
cat origin.json modify.json | json --deep-merge { "key_a": "modify_value_a", "key_b": { "key_b_a": "value_b_a", "key_b_b": "add_value_b_a" }, "key_c": { "key_c_a": "modify_value_c_a", "key_c_b": "value_c_b", "key_c_c": "add_value_c_b" }, "key_d": "new_value_d" }
看起來就比較對了
要修改的修改
要新增的新增
Json 真是博大精深超難搞的
我還是敬而遠之吧 XD