With this change array fields are populated from json(b) arrays, and composite fields are populated from json(b) objects.
Along the way, some significant code refactoring is done to remove redundancy in the way to populate_record[_set] and to_record[_set] functions operate, and some significant efficiency gains are made by caching tuple descriptors.
Nikita Glukhov, edited some by me.
Reviewed by Aleksander Alekseev and Tom Lane.
cf35346 Make json_populate_record and friends operate recursively
doc/src/sgml/func.sgml | 16 +-
src/backend/utils/adt/jsonfuncs.c | 1700 ++++++++++++++++++++++++-----------
src/test/regress/expected/json.out | 466 +++++++++-
src/test/regress/expected/jsonb.out | 478 +++++++++-
src/test/regress/sql/json.sql | 156 +++-
src/test/regress/sql/jsonb.sql | 156 +++-
6 files changed, 2412 insertions(+), 560 deletions(-)