1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-06 16:48:01 +00:00

Add Count Each Collection In A JSON Object as a jq TIL

This commit is contained in:
jbranchaud
2023-02-28 15:28:48 -06:00
parent f7313218c1
commit 12178cf153
2 changed files with 36 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).
_1287 TILs and counting..._
_1288 TILs and counting..._
---
@@ -485,6 +485,7 @@ _1287 TILs and counting..._
### jq
- [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)
- [Find All Objects With A Matching Key Value Pair](jq/find-all-objects-with-a-matching-key-value-pair.md)

View File

@@ -0,0 +1,34 @@
# Count Each Collection In A JSON Object
Let's say your JSON file is an object that represents several different
collections (arrays) of data.
```json
{
"users": [ ... ],
"orders": [ ... ],
"carts": [ ... ]
}
```
We can get a nice summary of the counts of those collections using
[`jq`](https://stedolan.github.io/jq/). We can do that with the [`with_entries`
function](https://stedolan.github.io/jq/manual/#to_entries,from_entries,with_entries).
We preserve the key (name) of each collection and then process each list with
the `length` function.
```bash
jq '. | with_entries({ "key": .key, "value": (.value | length)})' data.json
{
"users": 1234,
"orders": 5432,
"carts": 89
}
```
The `with_entries` function essentially maps over each key-value pair
processing it with the given expression. It will then convert that `{"key":
some_key, "value": 123}` mapping back into a key-value pair that gets combined
with all the others.
[source](https://til.simonwillison.net/jq/flatten-nested-json-objects-jq)