1

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?

0

3 Answers 3

3

You need to collect the results into an array and add them

.cases | map({ "\(.id)" : .count }) | add 
Sign up to request clarification or add additional context in comments.

1 Comment

Ohh, leaving out the [] after cases is the important ingredient!
2

Here's an approach using reduce which iteratively builds up the result object:

reduce .cases[] as {$id, $count} ({}; .[$id] = $count) 

Demo

Comments

2

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 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.