如何在jq中选择多个字段

时间:2016-01-17 02:38:25

标签: jq

我的输入文件如下所示:

{
"login": "dmaxfield",
"id": 7449977,
...
}
{
"login": "dmaxfield",
"id": 7449977,
...
}

我可以使用以下命令获取所有登录名:cat members | jq '.[].login'

但是我无法破解语法以获取登录名和ID?

4 个答案:

答案 0 :(得分:57)

您可以使用jq '.[] | .login, .id'获取每个登录名及其ID。

答案 1 :(得分:29)

这对我有用:

> echo '{"a":1,"b":2,"c":3}{"a":1,"b":2,"c":3}' | jq '{a,b}'
{
  "a": 1,
  "b": 2
}
{
  "a": 1,
  "b": 2
}

答案 2 :(得分:4)

在这里再提供一个示例(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”的对象中

答案 3 :(得分:1)

为了选择缩进不同级别(即第一和第二级别)的值,您可以使用以下命令:

$ 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
]