Home > Software engineering >  How to select jq items where length of key value exceeds a number
How to select jq items where length of key value exceeds a number

Time:01-29

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?

CodePudding user response:

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

  •  Tags:  
  • Related