Search JSON array with JQ
JQ is a powerful command-line JSON processing tool. It's super fast (C), provides solid documentation, and is easy to use. In this example, given a JSON object from a file, curl response; we look through an array nested inside an object, and return a matching object within the array. I want to lookup the id of an item, given the name.
{
    "ok": true,
    "items": [
        {"id": 123, "name": "thing-1"},
        {"id": 124, "name": "thing-2"},
        {"id": 125, "name": "thing-3"}
    ]
}
We can pipe a filter result within the JQ sequence with the | character, just like a standard shell interface. The select command then searches a match pattern within an iterable array.
cat file.json | jq '.items[] | select(.name == "thing-3") | .'
The final select result is piped and formatted as needed. For example, we can use the -r (raw output) option to return unformatted (not quoted) output, and ONLY the id field.
cat file.json | jq -r '.items[] | select(.name == "thing-3") | .id'
There are numerous useful operators and functions provided in the documentation. JQ also provides a fantastic playground here.