How do I select multiple fields in jq?

Jq

Jq Problem Overview


My input file looks something like this:

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

I can get all the login names with this : cat members | jq '.[].login'

but I have not been able to crack the syntax to get both the login and id?

Jq Solutions


Solution 1 - Jq

You can use jq '.[] | .login, .id' to obtain each login followed by its id.

Solution 2 - Jq

This works for me:

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

Solution 3 - Jq

Just provide one more example here (jq-1.6):

Walk through an array and select a field of an object element and a field of object in that object

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"
}

Without the example data:

jq ".[] | {id, name: .private_info.name}" -

.[]: walk through an array

{id, name: .private_info.name}: take .id and .private_info.name and wrap it into an object with field name "id" and "name" respectively

Solution 4 - Jq

In order to select values which are indented to different levels (i.e. both first and second level), you might use the following:

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]

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJ. GroesserView Question on Stackoverflow
Solution 1 - Jquser3899165View Answer on Stackoverflow
Solution 2 - JqPeter V. MørchView Answer on Stackoverflow
Solution 3 - JqWYCView Answer on Stackoverflow
Solution 4 - JqvreyespueView Answer on Stackoverflow