PostgreSQL json_each() Function

The PostgreSQL json_each() function expands a specified JSON object into a set of key-value pairs (the keys are of type text and the values ​​are of type JSON).

json_each() Syntax

This is the syntax of the PostgreSQL json_each() function:

json_each(any_object JSON) -> SETOF RECORD(key TEXT, value JSON)

Parameters

any_object

Required. a JSON object.

Return value

The PostgreSQL json_each() function returns a set of key-value pairs (the keys are of type text and the values ​​are of type JSON), it has two columns key and value, corresponding to the key and value of the top-level key-value pair in the JSON object respectively.

json_each() Examples

This example shows how to use the PostgreSQL json_each() function to expand a JSON object into a set of key-value pairs.

SELECT json_each('{"name": "Tom", "age": 20, "hobbies": ["sports", "cars"]}');
             json_each
------------------------------------
 (name,"""Tom""")
 (age,20)
 (hobbies,"[""sports"", ""cars""]")

Since the json_each() function return value is of type SETOF, you can use json_each() as a temporary table in the SELECT * FROM statement:

SELECT
    *
FROM
    json_each('{"name": "Tom", "age": 20, "hobbies": ["sports", "cars"]}');
   key   |       value
---------+--------------------
 name    | "Tom"
 age     | 20
 hobbies | ["sports", "cars"]

This result set has 2 columns key and value, corresponding to the key and value of the key-value pair in the JSON object, respectively.

Note that the type of value column is JSON. This is the difference from the json_each_text() function.

You can use customized column names like:

SELECT
    *
FROM
    json_each('{"name": "Tom", "age": 20, "hobbies": ["sports", "cars"]}')
    AS x(k, v);
    k    |         v
---------+--------------------
 name    | "Tom"
 age     | 20
 hobbies | ["sports", "cars"]