json - 使用 jq 和命令行参数从 JSON 对象中获取字段
问题描述
假设以下 JSON 文件
{
"foo": "hello",
"bar": "world"
}
我想foo
从独立对象中的 JSON 对象中获取字段,我这样做:
<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 }"
推荐阅读
- angular - 使用主题在组件之间共享数据时获取未定义
- search - 保存了客户对子列表合作伙伴的搜索
- python - Nordic Thingy52 btle 颜色传感器数据解码
- angular - 使用 Angular-oauth2-oidc 在 Angular 中使用 PKCE 的授权代码流
- php - 为什么我的本地主机不加载网站?PHP - 费多拉
- google-sheets - 从 Google 表格中的单元格/标题制作复杂的图像路径
- angular - 如何使用新参数 retryWhen 函数?角 9
- javascript - 在单击事件的类中调用 Javascript 函数
- java - LocaleDateTime atZone 格式忽略不同的时区
- jquery - 如何使用 Jquery 获取标签数组中每个标签的位置