diff options
| author | Andrew Dunstan <andrew@dunslane.net> | 2014-12-12 15:31:14 -0500 |
|---|---|---|
| committer | Andrew Dunstan <andrew@dunslane.net> | 2014-12-12 15:31:14 -0500 |
| commit | 7e354ab9fe9e7c3b0a7a40f226c76bd5cf6438d0 (patch) | |
| tree | d306f564a7ec8a3fc0a657c93671f36a63b0dce2 /doc/src | |
| parent | 8ec8760fc87ecde0516e511f1c55aec627b01ea7 (diff) | |
Add several generator functions for jsonb that exist for json.
The functions are:
to_jsonb()
jsonb_object()
jsonb_build_object()
jsonb_build_array()
jsonb_agg()
jsonb_object_agg()
Also along the way some better logic is implemented in
json_categorize_type() to match that in the newly implemented
jsonb_categorize_type().
Andrew Dunstan, reviewed by Pavel Stehule and Alvaro Herrera.
Diffstat (limited to 'doc/src')
| -rw-r--r-- | doc/src/sgml/func.sgml | 97 |
1 files changed, 72 insertions, 25 deletions
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index da138e1fee7..ef69b94cf03 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -10245,9 +10245,10 @@ table2-mapping <para> <xref linkend="functions-json-creation-table"> shows the functions that are - available for creating <type>json</type> values. - (Currently, there are no equivalent functions for <type>jsonb</>, but you - can cast the result of one of these functions to <type>jsonb</>.) + available for creating <type>json</type> and <type>jsonb</type> values. + (There are no equivalent functions for <type>jsonb</>, of the <literal>row_to_json</> + and <literal>array_to_json</> functions. However, the <literal>to_jsonb</> + function supplies much the same functionality as these functions would.) </para> <indexterm> @@ -10268,6 +10269,18 @@ table2-mapping <indexterm> <primary>json_object</primary> </indexterm> + <indexterm> + <primary>to_jsonb</primary> + </indexterm> + <indexterm> + <primary>jsonb_build_array</primary> + </indexterm> + <indexterm> + <primary>jsonb_build_object</primary> + </indexterm> + <indexterm> + <primary>jsonb_object</primary> + </indexterm> <table id="functions-json-creation-table"> <title>JSON Creation Functions</title> @@ -10282,17 +10295,18 @@ table2-mapping </thead> <tbody> <row> + <entry><para><literal>to_json(anyelement)</literal> + </para><para><literal>to_jsonb(anyelement)</literal> + </para></entry> <entry> - <literal>to_json(anyelement)</literal> - </entry> - <entry> - Returns the value as JSON. Arrays and composites are converted + Returns the value as <type>json</> or <type>jsonb</>. + Arrays and composites are converted (recursively) to arrays and objects; otherwise, if there is a cast from the type to <type>json</type>, the cast function will be used to - perform the conversion; otherwise, a JSON scalar value is produced. + perform the conversion; otherwise, a scalar value is produced. For any scalar type other than a number, a Boolean, or a null value, - the text representation will be used, properly quoted and escaped - so that it is a valid JSON string. + the text representation will be used, in such a fashion that it is a + valid <type>json</> or <type>jsonb</> value. </entry> <entry><literal>to_json('Fred said "Hi."'::text)</literal></entry> <entry><literal>"Fred said \"Hi.\""</literal></entry> @@ -10321,9 +10335,9 @@ table2-mapping <entry><literal>{"f1":1,"f2":"foo"}</literal></entry> </row> <row> - <entry> - <literal>json_build_array(VARIADIC "any")</literal> - </entry> + <entry><para><literal>json_build_array(VARIADIC "any")</literal> + </para><para><literal>jsonb_build_array(VARIADIC "any")</literal> + </para></entry> <entry> Builds a possibly-heterogeneously-typed JSON array out of a variadic argument list. @@ -10332,9 +10346,9 @@ table2-mapping <entry><literal>[1, 2, "3", 4, 5]</literal></entry> </row> <row> - <entry> - <literal>json_build_object(VARIADIC "any")</literal> - </entry> + <entry><para><literal>json_build_object(VARIADIC "any")</literal> + </para><para><literal>jsonb_build_object(VARIADIC "any")</literal> + </para></entry> <entry> Builds a JSON object out of a variadic argument list. By convention, the argument list consists of alternating @@ -10344,9 +10358,9 @@ table2-mapping <entry><literal>{"foo": 1, "bar": 2}</literal></entry> </row> <row> - <entry> - <literal>json_object(text[])</literal> - </entry> + <entry><para><literal>json_object(text[])</literal> + </para><para><literal>jsonb_object(text[])</literal> + </para></entry> <entry> Builds a JSON object out of a text array. The array must have either exactly one dimension with an even number of members, in which case @@ -10359,9 +10373,9 @@ table2-mapping <entry><literal>{"a": "1", "b": "def", "c": "3.5"}</literal></entry> </row> <row> - <entry> - <literal>json_object(keys text[], values text[])</literal> - </entry> + <entry><para><literal>json_object(keys text[], values text[])</literal> + </para><para><literal>json_object(keys text[], values text[])</literal> + </para></entry> <entry> This form of <function>json_object</> takes keys and values pairwise from two separate arrays. In all other respects it is identical to the one-argument form. @@ -10780,7 +10794,8 @@ table2-mapping function <function>json_agg</function> which aggregates record values as JSON, and the aggregate function <function>json_object_agg</function> which aggregates pairs of values - into a JSON object. + into a JSON object, and their <type>jsonb</type> equivalents, + <function>jsonb_agg</> and <function>jsonb_object_agg</>. </para> </sect1> @@ -12227,6 +12242,22 @@ NULL baz</literallayout>(3 rows)</entry> <row> <entry> <indexterm> + <primary>jsonb_agg</primary> + </indexterm> + <function>jsonb_agg(<replaceable class="parameter">record</replaceable>)</function> + </entry> + <entry> + <type>record</type> + </entry> + <entry> + <type>jsonb</type> + </entry> + <entry>aggregates records as a JSON array of objects</entry> + </row> + + <row> + <entry> + <indexterm> <primary>json_object_agg</primary> </indexterm> <function>json_object_agg(<replaceable class="parameter">name</replaceable>, <replaceable class="parameter">value</replaceable>)</function> @@ -12243,6 +12274,22 @@ NULL baz</literallayout>(3 rows)</entry> <row> <entry> <indexterm> + <primary>jsonb_object_agg</primary> + </indexterm> + <function>jsonb_object_agg(<replaceable class="parameter">name</replaceable>, <replaceable class="parameter">value</replaceable>)</function> + </entry> + <entry> + <type>("any", "any")</type> + </entry> + <entry> + <type>jsonb</type> + </entry> + <entry>aggregates name/value pairs as a JSON object</entry> + </row> + + <row> + <entry> + <indexterm> <primary>max</primary> </indexterm> <function>max(<replaceable class="parameter">expression</replaceable>)</function> @@ -12386,8 +12433,8 @@ SELECT count(*) FROM sometable; <para> The aggregate functions <function>array_agg</function>, - <function>json_agg</function>, - <function>json_object_agg</function>, + <function>json_agg</function>, <function>jsonb_agg</function>, + <function>json_object_agg</function>, <function>jsonb_object_agg</function>, <function>string_agg</function>, and <function>xmlagg</function>, as well as similar user-defined aggregate functions, produce meaningfully different result values |
