1. 简介
postgresql9.3以后,我们可以将表的字段类型设置为json。
同时,postgresql还提供了jsonb格式,jsonb是json的二进制形式。
二者区别:
- json格式写入快,但读取慢;
- jsonb格式写入慢,但读取快。
2. 操作符
json&jsonb操作符 | 右操作数类型 | 描述 | 例子 | 结果 |
---|
-> | int | 获取json数组的元素 | ‘[{“a”:“foo”},{“b”:“bar”}]’::json->1 | {“b”:“bar”} |
-> | text | 通过key值获取json对象字段 | ‘{“a”: {“b”:“foo”}}’::json->‘a’ | {“b”:“foo”} |
->> | int | 获取json数组元素为字符串 | ‘[1,2,3]’::json->>2 | 3 |
->> | text | 获取json对象字段为字符串 | ‘{“a”:1,“b”:2}’::json->>‘b’ | 2 |
#> | text[] | 在指定路径下获取json对象 | ‘{“a”: {“b”:{“c”: “foo”}}}’::json#>’{a,b}’ | {“c”: “foo”} |
#>> | 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 |
|| | jsonb | 将两个jsonb值连接成一个新jsonb值 | ‘[“a”, “b”]’::jsonb || ‘[“c”, “d”]’::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’] |
- | text | 从左操作数中删除键/值对或字符串元素 | ‘{“a”: “b”}’::jsonb - ‘a’ |
- | text[] | 从左操作数中删除多个键/值对或字符串元素 | ‘{“a”: “b”, “c”: “d”}’::jsonb - ‘{a,c}’::text[] |
- | integer | 删除具有指定索引的数组元素(末尾为负整数) | ‘[“a”, “b”]’::jsonb - 1 |
#- | text[] | 删除具有指定路径的字段或元素 | ‘[“a”, {“b”:1}]’::jsonb #- ‘{1,b}’ |
原文地址:https://www.postgresql.org/docs/11/functions-json.html