How to pipe jq to less, with colour?

Use jq --color-output to colorise the JSON, combined with less --RAW-CONTROL-CHARS for ANSI colours to work.

jq --color-output . data.json | less --RAW-CONTROL-CHARS

Or shorthand:

jq -C . data.json | less -R

From the jq documentation:

--color-output / -C

By default, jq outputs colored JSON if writing to a terminal.
You can force it to produce color even if writing to a pipe or a file using -C.

From the less documentation:

-R or --RAW-CONTROL-CHARS

Like -r, but only ANSI "color" escape sequences and OSC 8
hyperlink sequences are output in "raw" form.  Unlike -r,
the screen appearance is maintained correctly, provided
that there are no escape sequences in the file other than
these types of escape sequences.