如何在jq中选择多个字段?
Posted
技术标签:
【中文标题】如何在jq中选择多个字段?【英文标题】:How do I select multiple fields in jq? 【发布时间】:2016-04-22 10:20:55 【问题描述】:我的输入文件如下所示:
"login": "dmaxfield",
"id": 7449977,
...
"login": "dmaxfield",
"id": 7449977,
...
我可以用这个得到所有的登录名:cat members | jq '.[].login'
但是我一直无法破解获取登录名和id的语法?
【问题讨论】:
您能否举例说明您的预期输出应该是什么样的?有很多方法可以表示登录名/ID 对。 【参考方案1】:您可以使用jq '.[] | .login, .id'
获取每个登录名及其ID。
【讨论】:
用户的示例输入看起来确实像一个对象流,但由于他们提供的示例脚本,我假设它被包装在一个他们省略的数组中。 @SantiagoLapresta:不需要这种假设。jq
适用于一系列对象 - 不需要数组包装器。 ...
字符串和最后一个逗号需要删除,但我认为这是隐含的。
或者如果您只想显示这两个字段。 jq '.[] | login, id'
@CameronTaggart,如果我想显示login.name
怎么办? jq '.[] | login.name, id'
似乎有效,请问正确的方法是什么?
@zyxue 这工作:jq '.[] | name: .login.name, id'
【参考方案2】:
这对我有用:
> echo '"a":1,"b":2,"c":3"a":1,"b":2,"c":3' | jq 'a,b'
"a": 1,
"b": 2
"a": 1,
"b": 2
【讨论】:
这很简单,正是我想做的事:有多个输入对象/哈希,只取其中的一些值,同时也将它们作为对象输出。 现在我可以在我的数码照片上使用它:ls *jpg | xargs -n 1 exiftool -json | jq ' SourceFile,CreateDate,CreationDate,Make,Model,DateTimeOriginal,SceneType,FileAccessDate,FileModifyDate,FileInodeChangeDate,SceneCaptureType,ModifyDate '
请注意,您没有为属性添加前缀.
。我花了一段时间才意识到这一点。【参考方案3】:
这里再举一个例子(jq-1.6):
遍历数组并选择对象元素的字段和该对象中的对象字段
echo '["id":1, "private_info": "name": "Ivy", "age": 18, "id":2, "private_info": "name": "Tommy", "aga": 18]' | jq ".[] | id: .id, name: .private_info.name" -
"id": 1,
"name": "Ivy"
"id": 2,
"name": "Tommy"
没有示例数据:
jq ".[] | id, name: .private_info.name" -
.[]
: 遍历数组
id, name: .private_info.name
:将 .id 和 .private_info.name 分别包装成一个字段名为“id”和“name”的对象
【讨论】:
包装到对象中以维护结构/键名很棒,正是我正在寻找的【参考方案4】:为了选择缩进到不同级别(即第一级和第二级)的值,您可以使用以下内容:
echo '["a":"aa":1,"ab":2,"b":3,"c":4,"a":"aa":5,"ab":6,"b":7,"c":8]' \
| jq '.[]|[.a.aa,.a.ab,.b]'
[
1,
2,
3
]
[
5,
6,
7
]
【讨论】:
以上是关于如何在jq中选择多个字段?的主要内容,如果未能解决你的问题,请参考以下文章
当单个表单中有多个下拉字段时,如何在 JQuery 中为选择标记引用选择器?