jq访问外部json资源
- 来自于变量
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对象,不能是普通的字符串值。
- 来自外部命令输出
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]'
- 来自外部文件
SOURCEJSON='{"ARR":[{"name": "name0", "addr": "addr0"}]}'
echo $SOURCEJSON | jq --argjson addInfo "$(<var.json)" '.ARR += [$addInfo]'
外部文件内容为:
$ cat var.json
{
"name": "name1",
"addr": "addr1"
}
- 还可以使用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无法区分是待处理原始文件,还是输入参数文件。
网友评论