操作符 | 右操作數(shù)類型 | 描述 | 示例 | 結(jié)果 |
-> | int | 獲取JSON數(shù)組元素(索引從0開始) | select '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json->2; | {"c":"baz"} |
-> | text | 通過鍵獲取值 | select '{"a": {"b":"foo"}}'::json->'a'; | {"b":"foo"} |
->> | int |
獲取JSON數(shù)組元素為 text |
select '[1,2,3]'::json->>2; | 3 |
->> | text | 通過鍵獲取值為text | select '{"a":1,"b":2}'::json->>'b'; | 2 |
#> | text[] |
在指定的路徑獲取JSON對(duì)象 |
select '{"a": {"b":{"c": "foo"}}}'::json#>'{a,b}'; | {"c": "foo"} |
#>> | text[] |
在指定的路徑獲取JSON對(duì)象為 text |
select '{"a":[1,2,3],"b":[4,5,6]}'::json#>>'{a,2}'; | 3 |
jsonb額外操作符
操作符 | 右操作數(shù)類型 | 描述 | 示例 | 結(jié)果 |
@> | jsonb | 左側(cè)json最上層的值是否包含右邊json對(duì)象 |
select '{"a":{"b":2}}'::jsonb @> '{"b":2}'::jsonb; select '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb; |
f t |
@ | jsonb | 左側(cè)json對(duì)象是否包含于右側(cè)json最上層的值內(nèi) | select '{"b":2}'::jsonb @ '{"a":1, "b":2}'::jsonb; | t |
? | text | text是否作為左側(cè)Json對(duì)象最上層的鍵 | select '{"a":1, "b":2}'::jsonb ? 'b'; | t |
?| | text[] | text[]中的任一元素是否作為左側(cè)Json對(duì)象最上層的鍵 | select '{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'c']; | t |
? | text[] | text[]中的所有元素是否作為左側(cè)Json對(duì)象最上層的鍵 | select '["a", "b"]'::jsonb ? array['a', 'b']; | t |
|| | jsonb | 連接兩個(gè)json對(duì)象,組成一個(gè)新的json對(duì)象 | select '["a", "b"]'::jsonb || '["c", "d"]'::jsonb; | ["a", "b", "c", "d"] |
- | text | 刪除左側(cè)json對(duì)象中鍵為text的鍵值對(duì) | select '{"a": "b"}'::jsonb - 'a'; | {} |
- | integer |
刪除數(shù)組指定索引處的元素,如果索引值為負(fù)數(shù),則從右邊計(jì)算索引值。 如果最上層容器內(nèi)不是數(shù)組,則拋出錯(cuò)誤。 |
select '["a", "b"]'::jsonb - 1; | ["a"] |
#- | text[] |
刪除指定路徑下的域或元素(如果是json數(shù)組,且整數(shù)值是負(fù)的, 則索引值從右邊算起) |
select '["a", {"b":1}]'::jsonb #- '{1,b}'; | ["a", {}] |
json創(chuàng)建函數(shù)
函數(shù) | 描述 | 示例 | 結(jié)果 |
to_json(anyelement) to_jsonb(anyelement) |
返回json或jsonb類型的值。數(shù)組和復(fù)合被轉(zhuǎn)換(遞歸)成數(shù)組和對(duì)象。另外除數(shù)字、 布爾、NULL值(直接使用NULL拋出錯(cuò)誤)外,其他標(biāo)量必須有類型轉(zhuǎn)換。(此處請(qǐng)參考原文) |
select to_json('3'::int); | 3 |
array_to_json(anyarray [, pretty_bool]) |
以JSON數(shù)組返回該數(shù)組。PostgreSQL多維數(shù)組變成JSON數(shù)組中的數(shù)組。 |
select array_to_json('{{1,5},{99,100}}'::int[],true); |
[[1,5], + |
row_to_json(record [, pretty_bool]) | 以JSON對(duì)象返回行。如果pretty_bool 為真,則在級(jí)別1元素之間添加換行。 | select row_to_json(row(1,'foo'),true); |
{"f1":1, + |
json_build_array(VARIADIC "any") jsonb_build_array(VARIADIC "any") |
建立一個(gè)由可變參數(shù)列表組成的不同類型的JSON數(shù)組 | select json_build_array(1,2,'3',4,5); | [1, 2, "3", 4, 5] |
json_build_object(VARIADIC "any") jsonb_build_object(VARIADIC "any") |
建立一個(gè)由可變參數(shù)列表組成的JSON對(duì)象。參數(shù)列表參數(shù)交替轉(zhuǎn)換為鍵和值。 | select json_build_object('foo',1,'bar',2); | {"foo" : 1, "bar" : 2} |
json_object(text[]) jsonb_object(text[]) |
根據(jù)text[]數(shù)組建立一個(gè)json對(duì)象,如果是一維數(shù)組,則必須有偶數(shù)個(gè) 元素,元素交替組成鍵和值。如果是二維數(shù)組,則每個(gè)元素必須有2個(gè)元素,可以組成鍵值對(duì)。 |
select json_object('{a, 1, b, "def", c, 3.5}'); select 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[]) |
分別從兩組text[]中獲取鍵和值,與一維數(shù)組類似。 | select json_object('{a, b}', '{1,2}'); | {"a" : "1", "b" : "2"} |
json處理函數(shù)
函數(shù) | 返回類型 | 描述 | 示例 | 結(jié)果 |
json_array_length(json) jsonb_array_length(jsonb) |
int | 返回Json數(shù)組最外層元素個(gè)數(shù) | 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對(duì)象轉(zhuǎn)換為鍵值對(duì)集合 | select json_each('{"a":"foo", "b":"bar"}'); |
(a,"""foo""") |
json_each_text(json) jsonb_each_text(jsonb) |
setof key text, value text | 將最外層Json對(duì)象轉(zhuǎn)換為鍵值對(duì)集合,且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,并轉(zhuǎn)為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對(duì)象最外層的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對(duì)象的value以base定義的行類型返回,如果行類型字段比json對(duì)象鍵值少,則多出的鍵值將被拋棄;如果行類型字段多,則多出的字段自動(dòng)填充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對(duì)象最外層數(shù)組以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數(shù)組轉(zhuǎn)換成json對(duì)象value的集合 | select json_array_elements('[1,true, [2,false]]'); |
1 |
json_array_elements_text(json) jsonb_array_elements_text(jsonb) |
setof text | 將json數(shù)組轉(zhuǎn)換成text的value集合 | select json_array_elements_text('["foo", "bar"]'); |
foo |
json_typeof(json) jsonb_typeof(jsonb) |
text |
返回json最外層value的數(shù)據(jù)類型,可能的類型有 object, array, string, number, boolean, 和null. |
select json_typeof('-123.4') | number |
json_to_record(json) jsonb_to_record(jsonb) |
record | 根據(jù)json對(duì)象創(chuàng)建一個(gè)record類型記錄,所有的函數(shù)都返回record類型,所以必須使用as明確定義record的結(jié)構(gòu)。 | 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 | 根據(jù)json數(shù)組創(chuàng)建一個(gè)record類型記錄,所有的函數(shù)都返回record類型,所以必須使用as明確定義record的結(jié)構(gòu)。 | 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對(duì)象中所有非null的數(shù)據(jù),其他的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 | 以縮進(jìn)的格式更容易閱讀的方式返回json對(duì)象 | select jsonb_pretty('[{"f1":1,"f2":null},2,null,3]'); |
[ |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
標(biāo)簽:寶雞 海西 辛集 濮陽 杭州 榆林 昭通 溫州
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《postgresql 實(shí)現(xiàn)修改jsonb字段中的某一個(gè)值》,本文關(guān)鍵詞 postgresql,實(shí)現(xiàn),修改,jsonb,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。