jq as a template engine

September 18, 2022

jq is one of those softwares that i normally dont use, but im glad its there when i need it. Thats the reason why i can never remember its syntax. This post is that, a kind of cheatsheet or reference to myself for the tasks that i normally use it for.

Extract a single property

If i want to extract a single property, in this case name, i only need to select it.

curl "https://jsonplaceholder.typicode.com/users/1" | jq '.name'

The . filter is the identity. Whether its the toplevel object, or an item of an iterator. Usually used to access the current item.

Filtering data

I can also “pipe” some property to a function or filter. For example to convert to uppercase

curl "https://jsonplaceholder.typicode.com/users/1" | jq '.name | ascii_upcase'

It could also be used to create new json objects

curl "https://jsonplaceholder.typicode.com/users/1" | jq '. | {name:.name, id:.id}'

Iterating data

If i want to apply a filter to every object in an array, i could use the .property[] iterator.

curl "https://jsonplaceholder.typicode.com/users" | jq '.[] | .username'

If i only need one property of the array, i could use a more compact syntax

curl "https://jsonplaceholder.typicode.com/users" | jq '.[].username'

If i want to collect everything in an array, i need to wrap all in []

curl "https://jsonplaceholder.typicode.com/users" | jq '[.[] | .username]'

String interpolation

If i need to interpolate some value to its string value, i could use the following syntaxis. \(.foo)

curl "https://jsonplaceholder.typicode.com/users" | jq '.[] | "\(.username) its called \(.name)"'

Its important to wrap the string in quotes ("). This is one of the main things i always forget

As a template example

With this, i could run the following command to get a list of users

curl "https://jsonplaceholder.typicode.com/users" | jq -r '.[] | "<li class=\"list-item\">\(.username) its called \(.name)</li>"'

What the -r flag does is output the content as a raw string, instead of trying to parse everything as a json value

edit 2023/12/31: Reading Scraping Goodreads i found out about jqterm: jq as a service

Leave your comment on the github issue, sending me an email or DMing me on twitter