@@ -10106,14 +10106,14 @@ table2-mapping
1010610106 <row>
1010710107 <entry><literal>-></literal></entry>
1010810108 <entry><type>int</type></entry>
10109- <entry>Get JSON array element</entry>
10110- <entry><literal>'[{"a":"foo"},{"a ":"bar"},{"a ":"baz"}]'::json->2</literal></entry>
10111- <entry><literal>{"a ":"baz"}</literal></entry>
10109+ <entry>Get JSON array element (indexed from zero) </entry>
10110+ <entry><literal>'[{"a":"foo"},{"b ":"bar"},{"c ":"baz"}]'::json->2</literal></entry>
10111+ <entry><literal>{"c ":"baz"}</literal></entry>
1011210112 </row>
1011310113 <row>
1011410114 <entry><literal>-></literal></entry>
1011510115 <entry><type>text</type></entry>
10116- <entry>Get JSON object field</entry>
10116+ <entry>Get JSON object field by key </entry>
1011710117 <entry><literal>'{"a": {"b":"foo"}}'::json->'a'</literal></entry>
1011810118 <entry><literal>{"b":"foo"}</literal></entry>
1011910119 </row>
@@ -10134,7 +10134,7 @@ table2-mapping
1013410134 <row>
1013510135 <entry><literal>#></literal></entry>
1013610136 <entry><type>text[]</type></entry>
10137- <entry>Get JSON object at specified path</entry>
10137+ <entry>Get JSON object at specified path</entry>
1013810138 <entry><literal>'{"a": {"b":{"c": "foo"}}}'::json#>'{a,b}'</literal></entry>
1013910139 <entry><literal>{"c": "foo"}</literal></entry>
1014010140 </row>
@@ -10164,10 +10164,10 @@ table2-mapping
1016410164 in <xref linkend="functions-jsonb-op-table">.
1016510165 Many of these operators can be indexed by
1016610166 <type>jsonb</> operator classes. For a full description of
10167- <type>jsonb</> containment semantics and nesting , see <xref
10167+ <type>jsonb</> containment and existence semantics , see <xref
1016810168 linkend="json-containment">. <xref linkend="json-indexing">
1016910169 describes how these operators can be used to effectively index
10170- <type>jsonb</>.
10170+ <type>jsonb</> data .
1017110171 </para>
1017210172 <table id="functions-jsonb-op-table">
1017310173 <title>Additional <type>jsonb</> Operators</title>
@@ -10230,13 +10230,13 @@ table2-mapping
1023010230 </para>
1023110231
1023210232 <indexterm>
10233- <primary>array_to_json </primary>
10233+ <primary>to_json </primary>
1023410234 </indexterm>
1023510235 <indexterm>
10236- <primary>row_to_json </primary>
10236+ <primary>array_to_json </primary>
1023710237 </indexterm>
1023810238 <indexterm>
10239- <primary>to_json </primary>
10239+ <primary>row_to_json </primary>
1024010240 </indexterm>
1024110241 <indexterm>
1024210242 <primary>json_build_array</primary>
@@ -10260,14 +10260,30 @@ table2-mapping
1026010260 </row>
1026110261 </thead>
1026210262 <tbody>
10263+ <row>
10264+ <entry>
10265+ <literal>to_json(anyelement)</literal>
10266+ </entry>
10267+ <entry>
10268+ Returns the value as JSON. Arrays and composites are converted
10269+ (recursively) to arrays and objects; otherwise, if there is a cast
10270+ from the type to <type>json</type>, the cast function will be used to
10271+ perform the conversion; otherwise, a JSON scalar value is produced.
10272+ For any scalar type other than a number, a boolean, or a null value,
10273+ the text representation will be used, properly quoted and escaped
10274+ so that it is a valid JSON string.
10275+ </entry>
10276+ <entry><literal>to_json('Fred said "Hi."'::text)</literal></entry>
10277+ <entry><literal>"Fred said \"Hi.\""</literal></entry>
10278+ </row>
1026310279 <row>
1026410280 <entry>
1026510281 <literal>array_to_json(anyarray [, pretty_bool])</literal>
1026610282 </entry>
1026710283 <entry>
10268- Returns the array as JSON. A PostgreSQL multidimensional array
10284+ Returns the array as a JSON array . A PostgreSQL multidimensional array
1026910285 becomes a JSON array of arrays. Line feeds will be added between
10270- dimension 1 elements if <parameter>pretty_bool</parameter> is true.
10286+ dimension- 1 elements if <parameter>pretty_bool</parameter> is true.
1027110287 </entry>
1027210288 <entry><literal>array_to_json('{{1,5},{99,100}}'::int[])</literal></entry>
1027310289 <entry><literal>[[1,5],[99,100]]</literal></entry>
@@ -10277,26 +10293,12 @@ table2-mapping
1027710293 <literal>row_to_json(record [, pretty_bool])</literal>
1027810294 </entry>
1027910295 <entry>
10280- Returns the row as JSON. Line feeds will be added between level
10281- 1 elements if <parameter>pretty_bool</parameter> is true.
10296+ Returns the row as a JSON object . Line feeds will be added between
10297+ level- 1 elements if <parameter>pretty_bool</parameter> is true.
1028210298 </entry>
1028310299 <entry><literal>row_to_json(row(1,'foo'))</literal></entry>
1028410300 <entry><literal>{"f1":1,"f2":"foo"}</literal></entry>
1028510301 </row>
10286- <row>
10287- <entry>
10288- <literal>to_json(anyelement)</literal>
10289- </entry>
10290- <entry>
10291- Returns the value as JSON. If the data type is not built in, and there
10292- is a cast from the type to <type>json</type>, the cast function will be used to
10293- perform the conversion. Otherwise, for any value other than a number,
10294- a Boolean, or a null value, the text representation will be used, escaped and
10295- quoted so that it is legal JSON.
10296- </entry>
10297- <entry><literal>to_json('Fred said "Hi."'::text)</literal></entry>
10298- <entry><literal>"Fred said \"Hi.\""</literal></entry>
10299- </row>
1030010302 <row>
1030110303 <entry>
1030210304 <literal>json_build_array(VARIADIC "any")</literal>
@@ -10318,7 +10320,7 @@ table2-mapping
1031810320 names and values.
1031910321 </entry>
1032010322 <entry><literal>json_build_object('foo',1,'bar',2)</literal></entry>
10321- <entry><literal>{"foo" : 1, "bar" : 2}</literal></entry>
10323+ <entry><literal>{"foo": 1, "bar": 2}</literal></entry>
1032210324 </row>
1032310325 <row>
1032410326 <entry>
@@ -10333,7 +10335,7 @@ table2-mapping
1033310335 </entry>
1033410336 <entry><para><literal>json_object('{a, 1, b, "def", c, 3.5}')</></para>
1033510337 <para><literal>json_object('{{a, 1},{b, "def"},{c, 3.5}}')</></para></entry>
10336- <entry><literal>{"a" : "1", "b" : "def", "c" : "3.5"}</literal></entry>
10338+ <entry><literal>{"a": "1", "b": "def", "c": "3.5"}</literal></entry>
1033710339 </row>
1033810340 <row>
1033910341 <entry>
@@ -10344,12 +10346,30 @@ table2-mapping
1034410346 arrays. In all other respects it is identical to the one-argument form.
1034510347 </entry>
1034610348 <entry><literal>json_object('{a, b}', '{1,2}')</literal></entry>
10347- <entry><literal>{"a" : "1", "b" : "2"}</literal></entry>
10349+ <entry><literal>{"a": "1", "b": "2"}</literal></entry>
1034810350 </row>
1034910351 </tbody>
1035010352 </tgroup>
1035110353 </table>
1035210354
10355+ <note>
10356+ <para>
10357+ <function>array_to_json</> and <function>row_to_json</> have the same
10358+ behavior as <function>to_json</> except for offering a pretty-printing
10359+ option. The behavior described for <function>to_json</> likewise applies
10360+ to each individual value converted by the other JSON creation functions.
10361+ </para>
10362+ </note>
10363+
10364+ <note>
10365+ <para>
10366+ The <xref linkend="hstore"> extension has a cast
10367+ from <type>hstore</type> to <type>json</type>, so that
10368+ <type>hstore</type> values converted via the JSON creation functions
10369+ will be represented as JSON objects, not as primitive string values.
10370+ </para>
10371+ </note>
10372+
1035310373 <para>
1035410374 <xref linkend="functions-json-processing-table"> shows the functions that
1035510375 are available for processing <type>json</type> and <type>jsonb</type> values.
@@ -10479,13 +10499,13 @@ table2-mapping
1047910499 </entry>
1048010500 </row>
1048110501 <row>
10482- <entry><para><literal>json_each_text(from_json json)</literal>
10483- </para><para><literal>jsonb_each_text(from_json jsonb)</literal>
10502+ <entry><para><literal>json_each_text(json)</literal>
10503+ </para><para><literal>jsonb_each_text(jsonb)</literal>
1048410504 </para></entry>
1048510505 <entry><type>setof key text, value text</type></entry>
1048610506 <entry>
1048710507 Expands the outermost JSON object into a set of key/value pairs. The
10488- returned value will be of type <type>text</>.
10508+ returned values will be of type <type>text</>.
1048910509 </entry>
1049010510 <entry><literal>select * from json_each_text('{"a":"foo", "b":"bar"}')</literal></entry>
1049110511 <entry>
@@ -10504,7 +10524,7 @@ table2-mapping
1050410524 <entry><para><type>json</type></para><para><type>jsonb</type>
1050510525 </para></entry>
1050610526 <entry>
10507- Returns JSON value pointed to by <parameter >path_elems</parameter >.
10527+ Returns JSON value pointed to by <replaceable >path_elems</replaceable >.
1050810528 </entry>
1050910529 <entry><literal>json_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4')</literal></entry>
1051010530 <entry><literal>{"f5":99,"f6":"foo"}</literal></entry>
@@ -10515,7 +10535,8 @@ table2-mapping
1051510535 </para></entry>
1051610536 <entry><type>text</type></entry>
1051710537 <entry>
10518- Returns JSON value pointed to by <parameter>path_elems</parameter>.
10538+ Returns JSON value pointed to by <replaceable>path_elems</replaceable>
10539+ as <type>text</>.
1051910540 </entry>
1052010541 <entry><literal>json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4', 'f6')</literal></entry>
1052110542 <entry><literal>foo</literal></entry>
@@ -10526,7 +10547,7 @@ table2-mapping
1052610547 </para></entry>
1052710548 <entry><type>setof text</type></entry>
1052810549 <entry>
10529- Returns set of keys in the JSON object. Only the <quote>outer</quote> object will be displayed .
10550+ Returns set of keys in the outermost JSON object.
1053010551 </entry>
1053110552 <entry><literal>json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}')</literal></entry>
1053210553 <entry>
@@ -10544,13 +10565,11 @@ table2-mapping
1054410565 </para></entry>
1054510566 <entry><type>anyelement</type></entry>
1054610567 <entry>
10547- Expands the object in <replaceable>from_json</replaceable> to a row whose columns match
10548- the record type defined by base. Conversion will be best
10549- effort; columns in base with no corresponding key in <replaceable>from_json</replaceable>
10550- will be left null. When processing <type>json</type>, if a
10551- column is specified more than once, the last value is used.
10568+ Expands the object in <replaceable>from_json</replaceable> to a row
10569+ whose columns match the record type defined by <replaceable>base</>
10570+ (see note below).
1055210571 </entry>
10553- <entry><literal>select * from json_populate_record(null::x , '{"a":1,"b":2}')</literal></entry>
10572+ <entry><literal>select * from json_populate_record(null::myrowtype , '{"a":1,"b":2}')</literal></entry>
1055410573 <entry>
1055510574<programlisting>
1055610575 a | b
@@ -10565,14 +10584,12 @@ table2-mapping
1056510584 </para></entry>
1056610585 <entry><type>setof anyelement</type></entry>
1056710586 <entry>
10568- Expands the outermost set of objects in <replaceable>from_json</replaceable> to a set
10569- whose columns match the record type defined by base.
10570- Conversion will be best effort; columns in base with no
10571- corresponding key in <replaceable>from_json</replaceable> will be left null.
10572- When processing <type>json</type>, if a column is specified more
10573- than once, the last value is used.
10587+ Expands the outermost array of objects
10588+ in <replaceable>from_json</replaceable> to a set of rows whose
10589+ columns match the record type defined by <replaceable>base</> (see
10590+ note below).
1057410591 </entry>
10575- <entry><literal>select * from json_populate_recordset(null::x , '[{"a":1,"b":2},{"a":3,"b":4}]')</literal></entry>
10592+ <entry><literal>select * from json_populate_recordset(null::myrowtype , '[{"a":1,"b":2},{"a":3,"b":4}]')</literal></entry>
1057610593 <entry>
1057710594<programlisting>
1057810595 a | b
@@ -10627,10 +10644,10 @@ table2-mapping
1062710644 </para></entry>
1062810645 <entry><type>text</type></entry>
1062910646 <entry>
10630- Returns the type of the outermost JSON value as a text string. The types are
10647+ Returns the type of the outermost JSON value as a text string.
10648+ Possible types are
1063110649 <literal>object</>, <literal>array</>, <literal>string</>, <literal>number</>,
10632- <literal>boolean</>, and <literal>null</>. (See note below regarding the
10633- distinction between a JSON <literal>null</> and a SQL NULL.)
10650+ <literal>boolean</>, and <literal>null</>.
1063410651 </entry>
1063510652 <entry><literal>json_typeof('-123.4')</literal></entry>
1063610653 <entry><literal>number</literal></entry>
@@ -10641,11 +10658,11 @@ table2-mapping
1064110658 </para></entry>
1064210659 <entry><type>record</type></entry>
1064310660 <entry>
10644- Returns an arbitrary record from a JSON object. As with all functions
10645- returning <type>record</>, the caller must explicitly define the structure of the record
10646- when making the call. The input JSON must be an object, not a scalar or an array.
10647- If <literal >nested_as_text</> is true, the function coerces nested complex elements to text.
10648- Also, see notes below on columns and types .
10661+ Builds an arbitrary record from a JSON object (see note below). As
10662+ with all functions returning <type>record</>, the caller must
10663+ explicitly define the structure of the record with an <literal>AS</>
10664+ clause. If <replaceable >nested_as_text</> is true, the function
10665+ coerces nested complex elements to text .
1064910666 </entry>
1065010667 <entry><literal>select * from json_to_record('{"a":1,"b":[1,2,3],"c":"bar"}',true) as x(a int, b text, d text) </literal></entry>
1065110668 <entry>
@@ -10662,10 +10679,11 @@ table2-mapping
1066210679 </para></entry>
1066310680 <entry><type>setof record</type></entry>
1066410681 <entry>
10665- Returns an arbitrary set of records from a JSON object. As with
10666- <function>json_to_record</>, the structure of the record must be explicitly defined when making the
10667- call. However, with <function>json_to_recordset</> the input JSON must be an array containing
10668- objects. <literal>nested_as_text</> works as with <function>json_to_record</>.
10682+ Builds an arbitrary set of records from a JSON array of objects (see
10683+ note below). As with all functions returning <type>record</>, the
10684+ caller must explicitly define the structure of the record with
10685+ an <literal>AS</> clause. <replaceable>nested_as_text</> works as
10686+ with <function>json_to_record</>.
1066910687 </entry>
1067010688 <entry><literal>select * from json_to_recordset('[{"a":1,"b":"foo"},{"a":"2","c":"bar"}]',true) as x(a int, b text);</literal></entry>
1067110689 <entry>
@@ -10681,44 +10699,25 @@ table2-mapping
1068110699 </tgroup>
1068210700 </table>
1068310701
10684- <note>
10685- <para>
10686- The <type>json</type> functions and operators can impose stricter
10687- validity requirements than the JSON types' input functions do. In
10688- particular, they check much more closely that any use of Unicode
10689- surrogate pairs to designate characters outside the Unicode Basic
10690- Multilingual Plane is correct.
10691- </para>
10692- </note>
10693-
1069410702 <note>
1069510703 <para>
1069610704 Many of these functions and operators will convert Unicode escapes in
10697- the JSON text to the appropriate UTF8 character when the database
10698- encoding is UTF8. In other encodings the escape sequence must be for an
10699- ASCII character, and any other code point in a Unicode escape sequence
10700- will result in an error. In general, it is best to avoid mixing Unicode
10701- escapes in JSON with a non-UTF8 database encoding, if possible.
10705+ JSON strings to the appropriate single character. This is a non-issue
10706+ if the input is type <type>jsonb</>, because the conversion was already
10707+ done; but for <type>json</> input, this may result in throwing an error,
10708+ as noted in <xref linkend="datatype-json">.
1070210709 </para>
1070310710 </note>
1070410711
1070510712 <note>
1070610713 <para>
10707- In <function>json_to_record</> and <function>json_to_recordset</>,
10714+ In <function>json_populate_record</>, <function>json_populate_recordset</>,
10715+ <function>json_to_record</> and <function>json_to_recordset</>,
1070810716 type coercion from the JSON is <quote>best effort</> and may not result
10709- in desired values for some types. JSON elements are matched to
10710- identical field names in the record definition, and elements which do
10711- not exist in the JSON will simply be NULL. JSON elements which are not
10712- defined in the record template will be omitted from the output.
10713- </para>
10714- </note>
10715-
10716- <note>
10717- <para>
10718- The <xref linkend="hstore"> extension has a cast
10719- from <type>hstore</type> to <type>json</type>, so that
10720- converted <type>hstore</type> values are represented as JSON objects,
10721- not as string values.
10717+ in desired values for some types. JSON keys are matched to
10718+ identical field names in the target row type, and fields that do
10719+ not exist in the JSON will simply be NULL. JSON keys that do not
10720+ appear in the target row type will be omitted from the output.
1072210721 </para>
1072310722 </note>
1072410723
@@ -10739,6 +10738,7 @@ table2-mapping
1073910738 <function>json_object_agg</function> which aggregates pairs of values
1074010739 into a JSON object.
1074110740 </para>
10741+
1074210742 </sect1>
1074310743
1074410744 <sect1 id="functions-sequence">
0 commit comments