I have a JSON file like this:
{
"cases": [
{"id": "1", "count": 2, "ignore": "f"},
{"id": "2", "count": 7, "ignore": "o"},
{"id": "3", "count": 11, "ignore": "o"}
]
}
Doing jq '.cases[] | { "\(.id)" : .count }' test.json
gives
{
"1": 2
}
{
"2": 7
}
{
"3": 11
}
but I need
{
"1": 2,
"2": 7,
"3": 11
}
How can I get there?
CodePudding user response:
You need to collect the results into an array and add
them
.cases | map({ "\(.id)" : .count }) | add
CodePudding user response:
Here's an approach using reduce
which iteratively builds up the result object:
reduce .cases[] as {$id, $count} ({}; .[$id] = $count)
CodePudding user response:
from_entries
sounds like the obvious choice. First map your input array to an array of key-value pairs, then construct an object from this array:
.cases | map({ key: .id, value: .count }) | from_entries