1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 15:18:01 +00:00

Add Combine An Array Of Objects Into A Single Object as a jq TIL

This commit is contained in:
jbranchaud
2023-08-17 10:14:00 -05:00
parent fba4cb171f
commit 66fd1e6c19
2 changed files with 42 additions and 1 deletions

View File

@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
_1332 TILs and counting..._
_1333 TILs and counting..._
---
@@ -492,6 +492,7 @@ _1332 TILs and counting..._
### jq
- [Combine An Array Of Objects Into A Single Object](jq/combine-an-array-of-objects-into-a-single-object.md)
- [Count Each Collection In A JSON Object](jq/count-each-collection-in-a-json-object.md)
- [Count The Number Of Things In A JSON File](jq/count-the-number-of-things-in-a-json-file.md)
- [Extract A List Of Values](jq/extract-a-list-of-values.md)

View File

@@ -0,0 +1,40 @@
# Combine An Array Of Objects Into A Single Object
If you've spent any amount of time pulling data out of a JSON file with `jq`,
you may have run into a result set that looks a little too spacious. It's this
array of single key-value pair objects.
```bash
$ jq '.items | map({(.slug)}: .amount})' my-data.json
[
{
"key-1": 123
},
{
"key-2": 345
},
{
"key-3": 456
},
...
]
```
When what you really wanted was a single object full of those unique key-value
pairs.
That query has you 90% of the way there. The trick is to pipe that array
through the [`add` function](https://jqlang.github.io/jq/manual/#add) which
will combine each of those individual objects into a single object.
```bash
$ jq '.items | map({(.slug)}: .amount}) | add' my-data.json
{
"key-1": 123,
"key-2": 345,
"key-3": 456,
...
}
```