繁体   English   中英

使用 jq 和命令行参数从 JSON 对象获取字段

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM