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

时间:2019-05-18 21:15:31

标签: json jq

这可以从文件中读取:

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

这是从stdin读取的:

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

如果我只想从这样的字符串中读取内容:

jq '.field' "$my_json"

该怎么做?

4 个答案:

答案 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