Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita3fc469

Browse files
author
Nikita Glukhov
committed
Add documentation for IS JSON predicate
1 parent4b3a5f7 commita3fc469

File tree

1 file changed

+254
-1
lines changed

1 file changed

+254
-1
lines changed

‎doc/src/sgml/func.sgml

Lines changed: 254 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16886,7 +16886,16 @@ $ ? (@ like_regex "^\\d+$")
1688616886
</listitem>
1688716887
</itemizedlist>
1688816888

16889-
<sect3 id="functions-sqljson-producing">
16889+
<para>
16890+
All SQL/JSON functions fall into one of the two groups.
16891+
<link linkend="functions-sqljson-producing">Constructor functions</link>
16892+
generate JSON data from values of SQL types.
16893+
<link linkend="functions-sqljson-querying">Query functions</link>
16894+
evaluate SQL/JSON path language expressions against JSON values
16895+
and produce values of SQL/JSON types, which are converted to SQL types.
16896+
</para>
16897+
16898+
<sect3 id="functions-sqljson-producing">
1689016899
<title>Producing JSON Content</title>
1689116900

1689216901
<para>
@@ -17646,10 +17655,254 @@ FROM films AS f;
1764617655
</sect5>
1764717656
</sect4>
1764817657
</sect3>
17658+
17659+
<sect3 id="functions-sqljson-querying">
17660+
<title>Querying JSON</title>
17661+
17662+
<para>
17663+
SQL/JSON query functions evaluate SQL/JSON path language expressions
17664+
against JSON values, producing values of SQL/JSON types, which are
17665+
converted to SQL types. All SQL/JSON query functions accept several
17666+
common clauses described in <xref linkend="sqljson-common-clauses"/>.
17667+
For details on the SQL/JSON path language,
17668+
see <xref linkend="functions-sqljson-path"/>.
17669+
</para>
17670+
17671+
<itemizedlist>
17672+
<listitem>
17673+
<para>
17674+
<xref linkend="functions-isjson-predicate"/>
17675+
</para>
17676+
</listitem>
17677+
</itemizedlist>
17678+
17679+
<para>
17680+
In some usage examples for these functions,
17681+
the following small table storing some JSON data will be used:
17682+
<programlisting>
17683+
CREATE TABLE my_films (
17684+
js text );
17685+
17686+
INSERT INTO my_films VALUES (
17687+
'{ "favorites" : [
17688+
{ "kind" : "comedy", "films" : [
17689+
{ "title" : "Bananas",
17690+
"director" : "Woody Allen"},
17691+
{ "title" : "The Dinner Game",
17692+
"director" : "Francis Veber" } ] },
17693+
{ "kind" : "horror", "films" : [
17694+
{ "title" : "Psycho",
17695+
"director" : "Alfred Hitchcock" } ] },
17696+
{ "kind" : "thriller", "films" : [
17697+
{ "title" : "Vertigo",
17698+
"director" : "Alfred Hitchcock" } ] },
17699+
{ "kind" : "drama", "films" : [
17700+
{ "title" : "Yojimbo",
17701+
"director" : "Akira Kurosawa" } ] }
17702+
] }');
17703+
</programlisting>
17704+
</para>
17705+
17706+
<refentry id="functions-isjson-predicate">
17707+
<refnamediv>
17708+
<refname>IS JSON</refname>
17709+
<refpurpose>test whether the provided value is valid JSON data</refpurpose>
17710+
</refnamediv>
17711+
17712+
<refsynopsisdiv>
17713+
<synopsis>
17714+
<replaceable class="parameter">expression</replaceable>
17715+
IS [ NOT ] JSON
17716+
[ { VALUE | SCALAR | ARRAY | OBJECT } ]
17717+
[ { WITH | WITHOUT } UNIQUE [ KEYS ] ]
17718+
</synopsis>
17719+
</refsynopsisdiv>
17720+
17721+
<refsect1>
17722+
<title>Description</title>
17723+
17724+
<para>
17725+
<command>IS JSON</command> predicate tests whether the provided value is valid
17726+
<acronym>JSON</acronym> data. If you provide a specific JSON data type as a parameter,
17727+
you can check whether the value belongs to this type.
17728+
You can also use this predicate in the <command>IS NOT JSON</command> form.
17729+
The return values are:
17730+
<itemizedlist>
17731+
<listitem>
17732+
<para>
17733+
<literal>t</literal> if the value satisfies the specified condition.
17734+
</para>
17735+
</listitem>
17736+
<listitem>
17737+
<para>
17738+
<literal>f</literal> if the value does not satisfy the specified condition.
17739+
</para>
17740+
</listitem>
17741+
</itemizedlist>
17742+
</para>
17743+
</refsect1>
17744+
17745+
<refsect1>
17746+
<title>Parameters</title>
17747+
17748+
<variablelist>
17749+
17750+
<varlistentry>
17751+
<term>
17752+
<literal><replaceable class="parameter">expression</replaceable></literal>
17753+
</term>
17754+
<listitem>
17755+
17756+
<para>
17757+
The input clause defining the value to test. You can provide the values
17758+
of <literal>json</literal>, <literal>jsonb</literal>,
17759+
<literal>bytea</literal>, or character string types.
17760+
</para>
17761+
</listitem>
17762+
</varlistentry>
17763+
17764+
<varlistentry>
17765+
<term>
17766+
<literal>VALUE | SCALAR | ARRAY | OBJECT</literal>
17767+
</term>
17768+
<listitem>
17769+
17770+
<para>
17771+
Specifies the <acronym>JSON</acronym> data type to test for:
17772+
<itemizedlist>
17773+
<listitem>
17774+
<para>
17775+
<literal>VALUE</literal> (default) &mdash; any <acronym>JSON</acronym> type.
17776+
</para>
17777+
</listitem>
17778+
<listitem>
17779+
<para>
17780+
<literal>SCALAR</literal> &mdash; <acronym>JSON</acronym> number, string, or boolean.
17781+
</para>
17782+
</listitem>
17783+
<listitem>
17784+
<para>
17785+
<literal>ARRAY</literal> &mdash; <acronym>JSON</acronym> array.
17786+
</para>
17787+
</listitem>
17788+
<listitem>
17789+
<para>
17790+
<literal>OBJECT</literal> &mdash; <acronym>JSON</acronym> object.
17791+
</para>
17792+
</listitem>
17793+
</itemizedlist>
17794+
</para>
17795+
</listitem>
17796+
</varlistentry>
17797+
17798+
<varlistentry>
17799+
<term>
17800+
<literal>{ WITH | WITHOUT } UNIQUE [ KEYS ]</literal>
17801+
</term>
17802+
<listitem>
17803+
<para>Defines whether duplicate keys are allowed:
17804+
<itemizedlist>
17805+
<listitem>
17806+
<para>
17807+
<literal>WITHOUT</literal> (default) &mdash; the
17808+
<acronym>JSON</acronym> object can contain duplicate keys.
17809+
</para>
17810+
</listitem>
17811+
<listitem>
17812+
<para>
17813+
<literal>WITH</literal> &mdash; duplicate keys are not allowed.
17814+
If the input data contains duplicate keys, it is considered to be invalid JSON.
17815+
</para>
17816+
</listitem>
17817+
</itemizedlist>
17818+
Optionally, you can add the <literal>KEYS</literal> keyword for semantic clarity.
17819+
</para>
17820+
</listitem>
17821+
</varlistentry>
17822+
</variablelist>
17823+
17824+
</refsect1>
17825+
17826+
<refsect1>
17827+
<title>Examples</title>
17828+
17829+
<para>
17830+
Compare the result returned by the <function>IS JSON</function>
17831+
predicate for different data types:
17832+
</para>
17833+
<screen>
17834+
SELECT
17835+
js,
17836+
js IS JSON "is json",
17837+
js IS NOT JSON "is not json",
17838+
js IS JSON SCALAR "is scalar",
17839+
js IS JSON OBJECT "is object",
17840+
js IS JSON ARRAY "is array"
17841+
FROM
17842+
(VALUES ('123'), ('"abc"'), ('{"a": "b"}'), ('[1,2]'), ('abc')) foo(js);
17843+
17844+
js | is json | is not json | is scalar | is object | is array
17845+
------------+---------+-------------+-----------+-----------|-------------
17846+
123 | t | f | t | f | f
17847+
"abc" | t | f | t | f | f
17848+
{"a": "b"} | t | f | f | t | f
17849+
[1,2] | t | f | f | f | t
17850+
abc | f | t | f | f | f
17851+
(5 rows)
17852+
</screen>
17853+
</refsect1>
17854+
</refentry>
17855+
17856+
17857+
</sect3>
1764917858

1765017859
<sect3 id="sqljson-common-clauses">
1765117860
<title>SQL/JSON Common Clauses</title>
1765217861

17862+
<sect4 id="sqljson-input-clause">
17863+
<title>SQL/JSON Input Clause</title>
17864+
17865+
<variablelist>
17866+
<varlistentry>
17867+
<term>
17868+
<literal><replaceable>context_item</replaceable>, <replaceable>path_expression</replaceable>
17869+
[ PASSING { <replaceable>value</replaceable> AS <replaceable>varname</replaceable> } [, ...]]</literal>
17870+
</term>
17871+
<listitem>
17872+
<para>
17873+
The input clause specifies the JSON data to query and
17874+
the exact query path to be passed to SQL/JSON query functions:
17875+
</para>
17876+
<itemizedlist>
17877+
<listitem>
17878+
<para>
17879+
The <replaceable>context_item</replaceable> is the JSON data to query.
17880+
</para>
17881+
</listitem>
17882+
<listitem>
17883+
<para>
17884+
The <replaceable>path_expression</replaceable> is an SQL/JSON path
17885+
expression that specifies the items to be retrieved from the JSON
17886+
data. For details on path expression syntax, see
17887+
<xref linkend="functions-sqljson-path"/>.
17888+
</para>
17889+
</listitem>
17890+
<listitem>
17891+
<para>
17892+
The optional <command>PASSING</command> clause provides the values for
17893+
the named variables used in the SQL/JSON path expression.
17894+
</para>
17895+
</listitem>
17896+
</itemizedlist>
17897+
<para>
17898+
The input clause is common for all SQL/JSON query functions.
17899+
</para>
17900+
</listitem>
17901+
</varlistentry>
17902+
</variablelist>
17903+
17904+
</sect4>
17905+
1765317906
<sect4 id="sqljson-output-clause">
1765417907
<title>SQL/JSON Output Clause</title>
1765517908

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp