From 12178cf153b323d0a7a2a7c8cada0cdcae0a271d Mon Sep 17 00:00:00 2001 From: jbranchaud Date: Tue, 28 Feb 2023 15:28:48 -0600 Subject: [PATCH] Add Count Each Collection In A JSON Object as a jq TIL --- README.md | 3 +- jq/count-each-collection-in-a-json-object.md | 34 ++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 jq/count-each-collection-in-a-json-object.md diff --git a/README.md b/README.md index c1a84c2..c3f724e 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/jq/count-each-collection-in-a-json-object.md b/jq/count-each-collection-in-a-json-object.md new file mode 100644 index 0000000..843b235 --- /dev/null +++ b/jq/count-each-collection-in-a-json-object.md @@ -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)