这可以从文件中读取:
jq '.c | fromjson | .id' my_file.json
这从标准输入读取:
echo "$my_json" | jq -r '.field'
如果我只想读取这样的字符串怎么办:
jq '.field' "$my_json"
如何做到这一点?
您可以使用
bash
功能,通过 <<<
运算符从文字字符串重定向标准输入:
$ json='{"field": 3}'
$ jq .field <<< "$json"
3
它当然也适用于内联 JSON:
$ jq .field <<< '{"field": 3}'
3
$ jq -n '$in.foo' --argjson in '{"foo":"bar"}'
"bar"
$ jq -n '$foo' --arg foo 'bar'
"bar"
第三种可能性是从环境中读取字符串:
$ string='{"field": 33}' jq -n '$ENV.string|fromjson.field'
33
第四种(本质上也是唯一一种)可能性是使用位置参数(jq 1.5 及更高):
$ jq -n '$ARGS.positional[0]|fromjson.field' --args '{"field": 333}'
333
使用
-n
进行简单的调用就足够了:
jq -nr "${my_json}|.field"
示例:
> jq -nr '{foo: "bar",baz: "test"}|.foo'
bar