Purpose: Find all key-value pairs at any depth in the hierarchy of the supplied JSON compound value (such a pair can occur only as an element of an object), and return a JSON value where each pair whose value is the JSON null has been removed.

Signature For the jsonb variant:

input value:       jsonb
return value:      jsonb

Notes: By definition, these functions leave null values within arrays untouched.

do $body$
  j constant jsonb :=
      "a": 17,
      "b": null,
      "c": {"x": null, "y": "dog"},
      "d": [42, null, "cat"]

  stripped_j constant jsonb := jsonb_strip_nulls(j);

  expected_stripped_j constant jsonb :=
      "a": 17,
      "c": {"y": "dog"},
      "d": [42, null, "cat"]
    stripped_j = expected_stripped_j,