jq访问外部json资源

2020-07-11  本文已影响0人  CodingCode

jq访问外部json资源

  1. 来自于变量
SOURCEJSON='{"ARR":[{"name": "name0", "addr": "addr0"}]}'
VARJSON='{"name": "name1", "addr": "addr1"}'

echo $SOURCEJSON | jq --argjson addInfo '{"name": "name1", "addr": "addr1"}' '.ARR += [$addInfo]'
echo $SOURCEJSON | jq --argjson addInfo "$VARJSON" '.ARR += [$addInfo]'

注意:参数--argjson的值必须是json对象,不能是普通的字符串值。

  1. 来自外部命令输出
SOURCEJSON='{"ARR":[{"name": "name0", "addr": "addr0"}]}'

echo $SOURCEJSON | jq --argjson addInfo "$(cmd)" '.ARR += [$addInfo]'
echo $SOURCEJSON | jq --argjson addInfo "$(echo '{"name": "name1", "addr": "addr1"}')" '.ARR += [$addInfo]'
  1. 来自外部文件
SOURCEJSON='{"ARR":[{"name": "name0", "addr": "addr0"}]}'

echo $SOURCEJSON | jq --argjson addInfo "$(<var.json)" '.ARR += [$addInfo]'

外部文件内容为:

$ cat var.json
{
  "name": "name1",
  "addr": "addr1"
}
  1. 还可以使用input函数访问外部文件
jq '.ARR += [input]'  source.json var.json 
jq '.ARR += [inputs]' source.json var.json var2.json

input代表第一个输入文件,在前面例子中是 var.json
inputs代表所有的输入文件,在前面例子中是var.json, var2.json

注意的是:这种模式下待处理文件必须以第一个文件参数输入即source.json,而不能使用echo从stdin输入,因为否则input/inputs无法区分是待处理原始文件,还是输入参数文件。

上一篇 下一篇

猜你喜欢

热点阅读