Jim
Jim

Reputation: 189

How to select jq items where length of key value exceeds a number

I have this JSON input to JQjq

{
  "names": [{
    "name": "John Smith"
  },{
    "name": "Jane Doe"
  },{
    "name": "Jackson Longfellow"
  }]
}

I'd like to use jq to select all the items where the length of the name is > 10 characters. This means the output would be:

{
  "names": [{
    "name": "Jackson Longfellow"
  }]
}

The length filter only seems to count items in an array. Is there some other built-in filter to use for this?

Upvotes: 4

Views: 7772

Answers (1)

pmf
pmf

Reputation: 36151

Update |= the names array by selecting only those items that match. length applied to a string will output its length counting Unicode codepoints.

jq '.names |= map(select(.name | length > 10))'
{
  "names": [
    {
      "name": "Jackson Longfellow"
    }
  ]
}

Demo

Upvotes: 8

Related Questions