すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:JSON 関数とオペレーター

最終更新日:Dec 11, 2025

AnalyticDB for PostgreSQL は、PostgreSQL の JSON 関数およびオペレーターと互換性があります。このトピックでは、AnalyticDB for PostgreSQL でサポートされている JSON 関数とオペレーターについて説明し、その使用方法の例を示します。

PostgreSQL の JSON 関数とオペレーターの詳細については、「JSON Functions and Operators」をご参照ください。

JSON および JSONB オペレーター

AnalyticDB for PostgreSQL では、JSON データは jsonjsonb の 2 つのデータ型で格納されます。json および jsonb オペレーターは、JSON データの取得、管理、または比較に使用される記号です。AnalyticDB for PostgreSQL は、さまざまなオペレーターを提供します。

JSON 型および JSONB 型のデータでサポートされるオペレーター

オペレーター

右オペランドのデータ型

戻り値のデータ型

説明

結果例

->

int

json/jsonb

指定された配列インデックス (0 から開始) にある JSON 配列要素を取得します。負の整数は、配列の末尾から逆方向に要素をカウントすることを示します。

'[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json->2

{"c":"baz"}

->

text

json/jsonb

キーに基づいて JSON オブジェクトを取得します。

'{"a": {"b":"foo"}}'::json->'a'

{"b":"foo"}

->>

int

text

JSON 配列内の指定されたインデックスにある要素を text として取得します。

'[1,2,3]'::json->>2

3

->>

text

text

キーに基づいて JSON オブジェクトを text として取得します。

'{"a":1,"b":2}'::json->>'b'

2

#>

text[]

json/jsonb

指定されたパスにある JSON オブジェクトを取得します。

'{"a": {"b":{"c": "foo"}}}'::json#>'{a,b}'

{"c": "foo"}

#>>

text[]

text

指定されたパスにある JSON オブジェクトを text として取得します。

'{"a":[1,2,3],"b":[4,5,6]}'::json#>>'{a,2}'

3

JSONB 型のデータでのみサポートされるオペレーター

オペレーター

右オペランドのデータ型

説明

@>

jsonb

左の JSON 値が、トップレベルで右の JSON パスまたは値を含んでいるかどうかをチェックします。

'{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb

<@

jsonb

左の JSON パスまたは値が、右の JSON 値のトップレベルに含まれているかどうかをチェックします。

'{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb

?

text

右のキーまたは要素の文字列が、左の JSON 値のトップレベルに存在するかどうかをチェックします。

'{"a":1, "b":2}'::jsonb ? 'b'

?|

text[]

右の配列内のいずれかの文字列が、左の JSON 値のトップレベルキーとして存在するかどうかをチェックします。

'{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'c']

?&

text[]

右の配列内のすべての文字列が、左の JSON 値のトップレベルキーとして存在するかどうかをチェックします。

'["a", "b"]'::jsonb ?& array['a', 'b']

||

jsonb

2 つの JSONB 値を連結して、新しい JSONB 値を作成します。

'["a", "b"]'::jsonb || '["c", "d"]'::jsonb

-

text

左オペランドからキーと値のペアまたは文字列要素を削除します。キーと値のペアは、右オペランドで指定されたキーに基づいて照合されます。

'{"a": "b"}'::jsonb - 'a'

-

text[]

左オペランドから複数のキーと値のペアまたは文字列要素を削除します。キーと値のペアは、右オペランドで指定されたキーに基づいて照合されます。

'{"a": "b", "c": "d"}'::jsonb - '{a,c}'::text[]

-

integer

左オペランドから指定されたインデックスにある配列要素を削除します。負の整数は、配列の末尾から逆方向に要素をカウントすることを示します。トップレベルのコンテナーが配列でない場合、エラーメッセージが返されます。

'["a", "b"]'::jsonb - 1

#-

text[]

左オペランドの JSON 配列から、指定されたパスにあるフィールドまたは要素を削除します。負の整数は、配列の末尾から逆方向に要素をカウントすることを示します。

'["a", {"b":1}]'::jsonb #- '{1,b}'

@?

jsonpath

json パスが、左で指定された json 値内のいずれかのアイテムを見つけるかどうかをチェックします。

'{"a":[1,2,3,4,5]}'::jsonb @? '$.a[*] ? (@ > 2)'

@@

jsonpath

右オペランドで指定された json パスチェックの結果を返します。結果の最初の要素のみが考慮されます。結果がブール値でない場合、null が返されます。

'{"a":[1,2,3,4,5]}'::jsonb @@ '$.a[*] > 2'

JSON 関数

AnalyticDB for PostgreSQL は、JSON データを操作するための作成関数と処理関数の 2 種類の関数を提供します。JSON 作成関数は、テキストや配列などの他のデータ型を json データ型に変換します。JSON 処理関数は、json 値を操作したり、特定のフォーマットで返したりします。

JSON 作成関数

重要

JSONB 関数 (to_jsonbjsonb_build_arrayjsonb_build_object、および jsonb_object) は、AnalyticDB for PostgreSQL V7.0 インスタンスでのみ利用可能です。

関数

説明

結果例

to_json(any element)

to_jsonb(any element)

括弧内の値を json または jsonb として返します。

  • 配列とセットは、JSON 配列とオブジェクトに変換されます。

  • 配列またはコレクションではない値の場合、その型から json への変換関数が存在すれば、その関数が変換を実行します。それ以外の場合は、スカラー値が生成されます。

  • 数値、ブール値、または null 値ではないスカラー値の場合、その値のテキスト表現が有効な json または jsonb 値として使用されます。

to_json('Fred said "Hi."'::text)

"Fred said \"Hi.\""

array_to_json(any array, [pretty_bool])

配列を JSON 配列として返します。PostgreSQL では、多次元配列は配列の JSON 配列として返されます。pretty_bool が true の場合、最初のディメンションの要素間に改行が追加されます。

array_to_json('{{1,5},{99,100}}'::int[])

[[1,5],[99,100]]

row_to_json(record, [pretty_bool])

行を JSON オブジェクトとして返します。pretty_bool 引数の値が true の場合、レベル 1 の要素間に改行が追加されます。

row_to_json(row(1,'foo'))

{"f1":1,"f2":"foo"}

json_build_array(VARIADIC "any")

jsonb_build_array(VARIADIC "any")

可変長引数のリストに基づいて、異なるデータ型を含むことができる JSON 配列を構築します。

json_build_array(1,2,'3',4,5)

[1, 2, "3", 4, 5]

json_build_object(VARIADIC "any")

jsonb_build_object(VARIADIC "any")

可変長引数のリストに基づいて JSON オブジェクトを構築します。引数リストは、キーと値が交互に並んだ構成になります。

json_build_object('foo',1,'bar',2)

{"foo": 1, "bar": 2}

json_object(text[])

jsonb_object(text[])

テキスト配列に基づいて JSON オブジェクトを構築します。テキスト配列は、偶数個のメンバーを含む 1 次元配列にすることができます。メンバーは、交互にキーと値のペアとして解釈されます。テキスト配列は、2 次元配列にすることもできます。各配列には 2 つの要素があり、それらはキーと値のペアとして解釈されます。

json_object('{a, 1, b, "def", c, 3.5}')

json_object('{{a, 1},{b, "def"},{c, 3.5}}')

{"a": "1", "b": "def", "c": "3.5"}

json_object(keys text[], values text[])

jsonb_object(keys text[], values text[])

json_object は、2 つの別々の配列からキーと値のペアを作成します。その他の点では、これら 2 つの関数は、1 引数の対応する関数と同じ方法で使用できます。

json_object('{a, b}', '{1,2}')

{"a": "1", "b": "2"}

JSON 処理関数

関数

戻り値

説明

結果例

json_array_length(json)

jsonb_array_length(jsonb)

int

最も外側の JSON 配列内の要素数を返します。

json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]')

5

json_each(json)

jsonb_each(jsonb)

set of key text, value json

set of key text, value jsonb

最も外側の JSON オブジェクトを、キーと値のペアのセットに展開します。

SELECT * FROM json_each('{"a":"foo", "b":"bar"}')

 key | value
-----+-------
 a   | "foo"
 b   | "bar"
 

json_each_text(json)

jsonb_each_text(jsonb)

set of key text, value text

最も外側の JSON オブジェクトを、キーと値のペアのセットに展開します。返されるキー値は TEXT 型です。

SELECT * FROM json_each_text('{"a":"foo", "b":"bar"}')

 key | value
-----+-------
 a   | foo
 b   | bar
 

json_extract_path(from_json json, VARIADIC path_elems text[])

jsonb_extract_path(from_json jsonb, VARIADIC path_elems text[])

json

jsonb

path_elems で指定されたパスにある json 値を返します (#> オペレーターと同等)。

json_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4')

{"f5":99,"f6":"foo"}

json_extract_path_text(from_json json, VARIADIC path_elems text[])

jsonb_extract_path_text(from_json jsonb, VARIADIC path_elems text[])

text

path_elems 引数で指定されたパスにある JSON 値を text として返します。この操作は #>> オペレーターと同等です。

json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4', 'f6')

foo

json_object_keys(json)

jsonb_object_keys(jsonb)

set of text

最も外側の JSON オブジェクト内のキーのセットを返します。

json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}')

 json_object_keys
------------------
 f1
 f2

json_populate_record(base any element, from_json json)

jsonb_populate_record(base any element, from_json jsonb)

any element

from_json 引数で指定されたオブジェクトを、base 引数で指定されたレコードタイプに一致する列を持つ行に展開します。

SELECT * FROM json_populate_record(null::myrowtype, '{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "a b c"}}')

 a |   b       |      c
---+-----------+-------------
 1 | {2,"a b"} | (4,"a b c")

json_populate_recordset(base any element, from_json json)

jsonb_populate_recordset(base any element, from_json jsonb)

set of any element

from_json 引数で指定されたオブジェクトの最も外側の配列を、base 引数で指定されたレコードタイプに一致する列を持つ行のセットに展開します。

SELECT * FROM json_populate_recordset(null::myrowtype, '[{"a":1,"b":2},{"a":3,"b":4}]')

 a | b
---+---
 1 | 2
 3 | 4

json_array_elements(json)

jsonb_array_elements(jsonb)

set of json

set of jsonb

JSON 配列を JSON 値のセットに展開します。

SELECT * FROM json_array_elements('[1,true, [2,false]]')

  value
-----------
 1
 true
 [2,false]

json_array_elements_text(json)

jsonb_array_elements_text(jsonb)

set of text

json 配列を text 値のコレクションに展開します。

SELECT * FROM json_array_elements_text('["foo", "bar"]')

  value
-----------
 foo
 bar

json_typeof(json)

jsonb_typeof(jsonb)

text

最も外側の json 値の型をテキスト文字列として返します。可能な型は、objectarraystringnumberboolean、および null です。

json_typeof('-123.4')

number

json_to_record(json)

jsonb_to_record(jsonb)

record

json オブジェクトから任意のレコードを構築します。record を返す全ての関数と同様に、AS 句を使用してレコードの構造を明示的に定義する必要があります。

SELECT * FROM json_to_record('{"a":1,"b":[1,2,3],"c":"bar"}')

as x(a int, b text, c text)

 a |    b    | c   |
---+---------+-----+
 1 | [1,2,3] | bar |

json_to_recordset(json)

jsonb_to_recordset(jsonb)

set of record

オブジェクトの JSON 配列から任意のレコードのセットを構築します。record を返す全ての関数と同様に、AS 句を使用してレコードの構造を明示的に定義する必要があります。

SELECT * FROM json_to_recordset('[{"a":1,"b":"foo"},{"a":"2","c":"bar"}]') as x(a int, b text);

 a |  b
---+-----
 1 | foo
 2 |

json_strip_nulls(from_json json)

jsonb_strip_nulls(from_json jsonb)

json

jsonb

from_json 引数の入力値を返しますが、null 値を持つすべてのオブジェクトフィールドは省略され、他の null 値は保持されます。

json_strip_nulls('[{"f1":1,"f2":null},2,null,3]')

[{"f1":1},2,null,3]

jsonb_set(jsonb, path text[], new_value jsonb[,create_missing boolean])

jsonb

指定された path にあるアイテムを new_value に置き換えた jsonb を返します。指定された path にアイテムが存在せず、create_missingtrue (デフォルトは true) の場合、new_value が追加されます。パス指向のオペレーターと同様に、path に現れる負の整数は、json 配列の末尾からカウントされます。

jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}','[2,3,4]', false)

jsonb_set('[{"f1":1,"f2":null},2]', '{0,f3}','[2,3,4]')

[{"f1":[2,3,4],"f2":null},2,null,3]

[{"f1": 1, "f2": null, "f3": [2, 3, 4]}, 2]

jsonb_insert(target jsonb, path text[], new_value jsonb [, insert_after boolean])

jsonb

new_value が挿入された jsonb を返します。path で指定されたターゲットが jsonb 配列内にある場合、new_value はターゲットの前 (insert_after がデフォルトの false の場合) またはターゲットの後 (insert_aftertrue の場合) に挿入されます。path で指定されたターゲットが jsonb オブジェクト内にある場合、new_value はターゲットキーがまだ存在しない場合にのみ挿入されます。パス指向のオペレーターの場合、path に現れる負の整数は JSON 配列の末尾からカウントされます。

jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"')

jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"', true)

{"a": [0, "new_value", 1, 2]}

{"a": [0, 1, "new_value", 2]}

jsonb_pretty(from_json jsonb)

text

from_json 引数の入力値を、インデントされた JSON テキストとして返します。

jsonb_pretty('[{"f1":1,"f2":null},2,null,3]')

[
    {
        "f1": 1,
        "f2": null
    },
    2,
    null,
    3
]

jsonb_path_exists(target jsonb, path jsonpath [, vars jsonb [, silent bool]])

boolean

指定された JSON パスにあるいずれかのアイテムが、指定された JSON 値と一致するかどうかをチェックします。

jsonb_path_exists('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2,"max":4}')

true

jsonb_path_match(target jsonb, path jsonpath [, vars jsonb [, silent bool]])

boolean

指定された json パスにある最初の要素のチェック結果を返します。結果がブール値でない場合、null が返されます。

jsonb_path_match('{"a":[1,2,3,4,5]}', 'exists($.a[*] ? (@ >= $min && @ <= $max))', '{"min":2,"max":4}')

true

jsonb_path_query(target jsonb, path jsonpath [, vars jsonb [, silent bool]])

set of jsonb

指定された JSON 値に対して、指定された JSON パスにあるすべての JSON アイテムを取得します。

SELECT * FROM jsonb_path_query('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2,"max":4}');

 jsonb_path_query
------------------
 2
 3
 4

jsonb_path_query_array(target jsonb, path jsonpath [, vars jsonb [, silent bool]])

jsonb

指定された JSON パスにあるすべての JSON アイテムを取得し、結果を配列にラップします。

jsonb_path_query_array('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2,"max":4}')

[2, 3, 4]

jsonb_path_query_first(target jsonb, path jsonpath [, vars jsonb [, silent bool]])

jsonb

指定された JSON 値に対して、指定された JSON path にある最初の JSON アイテムを取得します。結果が取得されない場合、NULL が返されます。

jsonb_path_query_first('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2,"max":4}')

2