这可以从文件中读取:
jq '.c | fromjson | .id' my_file.json
这是从stdin读取的:
echo "$my_json" | jq -r '.field'
如果我只想从这样的字符串中读取内容:
jq '.field' "$my_json"
该怎么做?
答案 0 :(得分:2)
您可以使用bash
功能,使您可以使用<<<
运算符从文字字符串重定向stdin:
$ json='{"field": 3}'
$ jq .field <<< "$json"
3
它当然也适用于内联JSON:
$ jq .field <<< '{"field": 3}'
3
答案 1 :(得分:2)
app.route.all
$ jq -n '$in.foo' --argjson in '{"foo":"bar"}'
"bar"
$ jq -n '$foo' --arg foo 'bar'
"bar"
使用-n
作为输入(代替STDIN),
null
用于传递JSON实体(对象,数组,数字,字符串,布尔值或--argjson
)
null
用于传递(shell)字符串。
答案 2 :(得分:2)
第三种可能性是从环境中读取字符串:
$ string='{"field": 33}' jq -n '$ENV.string|fromjson.field'
33
第四个(而且基本上是其他)可能性是使用位置参数(jq 1.5和更高版本):
$ jq -n '$ARGS.positional[0]|fromjson.field' --args '{"field": 333}'
333
答案 3 :(得分:-1)
使用-n
进行简单的调用就足够了:
jq -nr "${my_json}|.field"
示例:
> jq -nr '{foo: "bar",baz: "test"}|.foo'
bar