Merge two json in bash (no jq)

2019-06-14 20:05发布

I have two jsons :

env.json

{  
   "environment":"INT"
}

roles.json

{  
   "run_list":[  
      "recipe[splunk-dj]",
      "recipe[tideway]",
      "recipe[AlertsSearch::newrelic]",
      "recipe[AlertsSearch]"
   ]
}

expected output should be some thing like this :

{  
       "environment":"INT",
    "run_list":[  
          "recipe[splunk-dj]",
          "recipe[tideway]",
          "recipe[AlertsSearch::newrelic]",
          "recipe[AlertsSearch]"
       ]
    }

I need to merge these two json (and other like these two) into one single json using only available inbuilt bash commands.

only have sed, cat, echo, tail, wc at my disposal.

2条回答
混吃等死
2楼-- · 2019-06-14 20:29

A little bit hacky, but hopefully will do.

env_lines=`wc -l < $1`
env_output=`head -n $(($env_lines - 1)) $1`
roles_lines=`wc -l < $2`
roles_output=`tail -n $(($roles_lines - 1)) $2`
echo "$env_output" "," "$roles_output"
查看更多
Emotional °昔
3楼-- · 2019-06-14 20:33

Tell whoever put the constraint "bash only" on the project that bash is not sufficient for processing JSON, and get jq.

$ jq --slurp 'add' env.json roles.json
查看更多
登录 后发表回答