恢復內容開始 json和jsonb的操作符 獲取JSON數組元素為 text 在指定的路徑獲取JSON對象 在指定的路徑獲取JSON對象為 text jsonb額外操作符 select '{"a":{"b":2}}'::jsonb @> '{"b":2}'::jsonb; select '{"a": ...
json和jsonb的操作符
jsonb額外操作符
json創建函數
json處理函數
函數 | 返回類型 | 描述 | 示例 | 結果 |
json_array_length(json) jsonb_array_length(jsonb) |
int | 返回Json數組最外層元素個數 | select json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]'); | 5 |
json_each(json) jsonb_each(jsonb) |
setof key text, value json setof key text, value jsonb |
將最外層Json對象轉換為鍵值對集合 | select json_each('{"a":"foo", "b":"bar"}'); |
(a,"""foo""") |
json_each_text(json) jsonb_each_text(jsonb) |
setof key text, value text | 將最外層Json對象轉換為鍵值對集合,且value為text類型 | select json_each_text('{"a":"foo", "b":"bar"}'); |
(a,foo) |
json_extract_path(from_json json, VARIADIC path_elems text[])
jsonb_extract_path(from_json jsonb, VARIADIC path_elems text[]) |
json jsonb |
返回path_elems指向的value,同操作符#> | select 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指向的value,並轉為text類型,同操作符#>> | select json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4', 'f6'); | foo |
json_object_keys(json) jsonb_object_keys(jsonb) |
setof text | 返回json對象最外層的key | select json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}'); |
f1 |
json_populate_record(base anyelement, from_json json)
jsonb_populate_record(base anyelement, from_json jsonb) |
anyelement | 將json對象的value以base定義的行類型返回,如果行類型欄位比json對象鍵值少,則多出的鍵值將被拋棄;如果行類型欄位多,則多出的欄位自動填充NULL。 |
表tbl_test定義:
Table "public.tbl_test" c | character varying(32) |
select * from json_populate_record(null::tbl_test, '{"a":1,"b":2}');
|
a | b | c |
json_populate_recordset(base anyelement, from_json json)
jsonb_populate_recordset(base anyelement, from_json jsonb) |
setof anyelement | 將json對象最外層數組以base定義的行類型返回 |
表定義同上 select * from json_populate_recordset(null::tbl_test, '[{"a":1,"b":2},{"a":3,"b":4}]'); |
a | b | c |
json_array_elements(json) jsonb_array_elements(jsonb) |
setof json setof jsonb |
將json數組轉換成json對象value的集合 | select json_array_elements('[1,true, [2,false]]'); |
1 |
json_array_elements_text(json) jsonb_array_elements_text(jsonb) |
setof text | 將json數組轉換成text的value集合 | select json_array_elements_text('["foo", "bar"]'); |
foo |
json_typeof(json) jsonb_typeof(jsonb) |
text |
返回json最外層value的數據類型,可能的類型有 object, array, string, number, boolean, 和null. |
select json_typeof('-123.4') | number |
json_to_record(json) jsonb_to_record(jsonb) |
record | 根據json對象創建一個record類型記錄,所有的函數都返回record類型,所以必須使用as明確定義record的結構。 | select * from json_to_record('{"a":1,"b":[1,2,3],"c":"bar"}') as x(a int, b text, d text); |
a | b | d |
json_to_recordset(json) jsonb_to_recordset(jsonb) |
setof record | 根據json數組創建一個record類型記錄,所有的函數都返回record類型,所以必須使用as明確定義record的結構。 | select * from json_to_recordset('[{"a":1,"b":"foo"},{"a":"2","c":"bar"}]') as x(a int, b text); |
a | b |
json_strip_nulls(from_json json) jsonb_strip_nulls(from_json jsonb) |
json jsonb |
返回json對象中所有非null的數據,其他的null保留。 |
select json_strip_nulls('[{"f1":1,"f2":null},2,null,3]'); |
[{"f1":1},2,null,3] |
jsonb_set(target jsonb, path text[],new_value jsonb[,create_missing boolean]) |
jsonb | 如果create_missing為true,則將在target的path處追加新的jsonb;如果為false,則替換path處的value。 |
select jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}','[2,3,4]', false);
select 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 | 如果insert_after是true,則在target的path後面插入新的value,否則在path之前插入。 |
select jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"');
select 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 | 以縮進的格式更容易閱讀的方式返回json對象 | select jsonb_pretty('[{"f1":1,"f2":null},2,null,3]'); |
[ |