假设以下JSON文件
{
"foo": "hello",
"bar": "world"
}
我想从独立对象的JSON对象中获取foo
字段,我这样做:
<file jq '{foo}'
{
"foo": "hello"
}
现在我真正想要的字段来自shell,并作为这样的参数提供给jq
:
<file jq --arg myarg "foo" '{$myarg}'
{
"myarg": "foo"
}
很遗憾,这没有得到预期的结果{"foo":"hello"}
。
知道变量名为何进入对象吗?
一种解决方法是显式定义对象:
<file jq '{($myarg):.[$myarg]}'
很好,但是有一种方法可以使用手册页中说明的快捷方式语法,但是要使用变量?
您可以使用它来选择对象的特定字段:如果输入是具有“用户”,“标题”,“ id”和“内容”字段的对象,而您只想要“用户”和“标题” ,你可以写
{user: .user, title: .title}
因为这很普遍,所以有一种快捷语法:
{user, title}
。
如果这很重要,我正在使用jq 1.5版
答案 0 :(得分:1)
简而言之,不。快捷方式语法只能在非常特殊的条件下使用。例如,它不能与jq keywords的键名一起使用。
Q中描述的方法是首选方法,但为便于记录,这里有两种选择:
jq --arg myarg "foo" '
.[$myarg] as $v | {} | .[$myarg] = $v'
当然,还有其他一些警告提示:
myarg=foo ; jq "{ $myarg }"