jq 读取内联字符串,而不是从 stdin

问题描述 投票:0回答:4

这可以从文件中读取:

jq '.c | fromjson | .id' my_file.json

这从标准输入读取:

echo "$my_json" | jq -r '.field'

如果我只想读取这样的字符串怎么办:

jq '.field' "$my_json"

如何做到这一点?

json jq
4个回答
10
投票

您可以使用

bash
功能,通过
<<<
运算符从文字字符串重定向标准输入:

$ json='{"field": 3}'
$ jq .field <<< "$json"
3

它当然也适用于内联 JSON:

$ jq .field <<< '{"field": 3}'
3

10
投票
$ jq -n '$in.foo' --argjson in '{"foo":"bar"}'
"bar"
$ jq -n '$foo' --arg foo 'bar'
"bar"

-1
投票

第三种可能性是从环境中读取字符串:

$ 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
投票

使用

-n
进行简单的调用就足够了:

jq -nr "${my_json}|.field"

示例:

> jq -nr '{foo: "bar",baz: "test"}|.foo'
bar
© www.soinside.com 2019 - 2024. All rights reserved.