[英]Get field from JSON object using jq and command line argument
假设有以下 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]}'
很好,但是有没有办法使用手册页中解释的快捷语法,但是有一个变量?
您可以使用它来选择对象的特定字段:如果输入是具有“user”、“title”、“id”和“content”字段的对象,而您只想要“user”和“title”,则可以写
{user: .user, title: .title}
因为这很常见,所以有一个快捷语法:
{user, title}
。
如果那很重要,我正在使用 jq 1.5 版
简而言之,没有。 快捷语法只能在非常特殊的条件下使用。 例如,它不能与 jq 关键字的键名一起使用。
Q 中描述的方法是首选方法,但为了记录,这里有两种替代方法:
jq --arg myarg "foo" '
.[$myarg] as $v | {} | .[$myarg] = $v'
当然,还有一个带有许多警告的替代方案:
myarg=foo ; jq "{ $myarg }"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.