mirror of
https://github.com/jbranchaud/til
synced 2026-01-02 22:58:01 +00:00
1.3 KiB
1.3 KiB
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.
[
{
"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 like
the following.
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.
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.
jq '. | map(select(has("token") and .token != null))' data.json
Here is a live example.