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

Add Find All Objects In An Array Where Key Is Set as a jq TIL

This commit is contained in:
jbranchaud
2023-03-07 15:10:31 -06:00
parent a09ec39aa1
commit 80f502f661
2 changed files with 52 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).
_1290 TILs and counting..._
_1291 TILs and counting..._
---
@@ -488,6 +488,7 @@ _1290 TILs and counting..._
- [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 In An Array Where Key Is Set](jq/find-all-objects-in-an-array-where-key-is-set.md)
- [Find All Objects With A Matching Key Value Pair](jq/find-all-objects-with-a-matching-key-value-pair.md)
- [Reduce Object To Just Entries Of A Specific Type](jq/reduce-object-to-just-entries-of-a-specific-type.md)

View File

@@ -0,0 +1,50 @@
# Find All Objects In An Array Where Key Is Set
Let's say we have a large array of objects. And the data in those objects,
while generally having the same shape, does not always have certain values set.
For instance, here is some data where the `token` is sometimes set, sometimes
`null`, and sometimes missing altogether.
```json
[
{
"id": 1,
"token": "abc"
},
{
"id": 3,
"token": null
},
{
"id": 5
},
...
]
```
We can find out how many objects in this collection have the `token` key set to
an actual value with [a `jq` query](https://stedolan.github.io/jq/manual) like
the following.
```bash
jq '. | map(select(has("token") and .token != null)) | length' data.json
```
This maps over each object selecting those where it has `token` and `token` is
not `null`.
We can instead produce the inverse count—those objects where `token` is not set
to a value—with the `not` operator.
```bash
jq '. | map(select(has("token") and .token != null | not)) | length' data.json
```
If you want to inspect the array of objects that either of these queries filters down to, you can drop the `| length` part.
```bash
jq '. | map(select(has("token") and .token != null))' data.json
```
Here is [a live example](https://jqterm.com/?query=.%20%7C%20map%28select%28has%28%22token%22%29%20and%20.token%20!%3D%20null%20%7C%20not%29%29).