jsonb_pretty()

This page documents the preview version (v2.23). Preview includes features under active development and is for development and testing only. For production, use the stable version (v2024.1). To learn more, see Versioning.

Purpose: Format the text representation of the JSON value that the input jsonb actual argument represents, using whitespace, to make it more human-readable.

Signature:

input value:       jsonb
return value:      text

Notes: There is no json variant. However, you can trivially typecast a json value to a jsonb value.

Because, in the main, JSON is mechanically generated and mechanically consumed, it's unlikely that you'll use jsonb_pretty() in final production code. However, because JSON isn't self-describing, and because external documentation of a corpus's data-representation intent isn't always available, developers often need to study a representative set of extant JSON values and deduce the intended rules of composition. This task is made easier when JSON values are formatted in a standard, well designed, way.

The pretty format makes conventional, and liberal, use of newlines and spaces, thus:

do $body$
declare
  orig_text constant text := '
    {
      "a": 1,
      "b": {"x": 1, "y": 19},
      "c": true
    }';

  expected_pretty_text text :=
'{
    "a": 1,
    "b": {
        "x": 1,
        "y": 19
    },
    "c": true
}';

  j constant jsonb := orig_text::jsonb;
  pretty_text constant text := jsonb_pretty(j);
begin
  assert
    pretty_text = expected_pretty_text,
 'unexpected';
end;
$body$;

You might prefer to use the ::text typecast to visualize a small jsonb value.