最近在陪著弄 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