日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

JSON函數和操作符

云原生數據倉庫 AnalyticDB PostgreSQL 版兼容PostgreSQL中的JSON函數和操作符。本文簡單列舉云原生數據倉庫 AnalyticDB PostgreSQL 版兼容的JSON函數和操作符及用法示例。

PostgreSQL中JSON函數和操作符的詳細使用方法,請參見PostgreSQL官方文檔:JSON函數和操作符

JSON和JSONB操作符

云原生數據倉庫 AnalyticDB PostgreSQL 版中存儲JSON數據有兩種類型:jsonjsonbjsonjsonb操作符是用于獲取、管理或比較JSON數據的符號。云原生數據倉庫 AnalyticDB PostgreSQL 版中提供了多種操作符。

JSON和JSONB通用操作符

操作符

右操作數類型

返回類型

描述

用法示例

示例結果

->

int

json/jsonb

獲取json數組中元素(索引從0開始,負整數表示從末尾開始數)。

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

{"c":"baz"}

->

text

json/jsonb

通過鍵獲取json對象。

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

{"b":"foo"}

->>

int

text

text類型獲取json數組中元素。

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

3

->>

text

text

text類型通過鍵獲取json對象。

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

2

#>

text[]

json/jsonb

獲取指定路徑的json對象。

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

{"c": "foo"}

#>>

text[]

text

text類型獲取指定路徑的json對象。

'{"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[]

右邊的數組字符串中的任意一個是否作為左邊的頂層鍵存在。

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

?&

text[]

右邊的數組字符串是否全部都作為左邊的頂層鍵存在。

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

||

jsonb

將兩個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 PostgreSQL 版中對JSON數據類型操作有兩種函數:JSON創建函數和JSON處理函數。JSON創建函數可以將文本、列表等數據類型轉換為json數據類型。JSON處理函數可以將json數據類型展開或者返回為特定格式。

JSON創建函數

函數

描述

用法示例

示例結果

to_json(any element)

to_jsonb(any element)

將括號中的值返回為json或者jsonb

  • 數組和集合會被轉換成數組和對象。

  • 對于不是數組和集合的值,如果存在從該類型到json的轉換函數,將用該函數來執行轉換;否則將產生一個標量值。

  • 對于任何不是數字、布爾值、空值的標量類型,將使用文本表示,在這種情況下它是一個合法的json或者jsonb值。

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

"Fred said \"Hi.\""

array_to_json(any array, [pretty_bool])

將數組返回為一個json數組。 PostgreSQL中一個多維數組會返回為一個json格式的數組。若pretty_bool為真,將在第一維度的元素之間增加換行。

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

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

row_to_json(record, [pretty_bool])

將行返回為一個json對象。若pretty_bool為真,將在第一層元素之間增加換行。

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對象。該數組必須是具有偶數個成員的一維數組(成員被看作交替出現的鍵值對),或是一個二維數組(每個內部數組恰好有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是從兩個獨立的數組得到鍵值對。在其他方面和一個參數的形式相同。

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

text類型返回由path_elems指向的JSON值(效果同#>>操作符)。

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值的類型作為一個文本字符串返回。可能的類型:objectarraystringnumberbooleannull

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,其中所有存在空值的對象域都被省略,其他空值除外。

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

返回jsonb,其中由path指定的項用new_value替換。若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_valuejsonb。如果path指定的jsonb在一個jsonb數組中,new_value將被插入到目標之前(當insert_after默認為false)或之后(當insert_aftertrue)。如果path指定的target在一個jsonb對象內,則只有target不存在時才插入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路徑返回的json項。 如果無結果,則返回NULL

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

2