1.json和jsonb操作符
操作符 | 右操作数类型 | 描述 | 例子 | 例子结果 |
---|
-> | int | 获得 JSON 数组元素(索引从 0 开始,负整数结束) | “’[{”“a”":"“foo”"},{"“b”":"“bar”"},{"“c”":"“baz”"}]’::json->2" | “{”“c”":"“baz”"}" |
-> | text | 通过键获得 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 |
2.额外的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[] | 这些数组字符串中的任何一个是否作为顶层键值存在? |
?& | text[] | 这些数组字符串是否作为顶层键值存在? | “’[”“a”", ““b””]’::jsonb ?& array[‘a’, ‘b’]" |
| | | jsonb |
- | text | 从左操作数中删除键/值对或字符串元素。基于键值匹配键/值对。 | “’{”“a”": ““b””}’::jsonb - ‘a’" |
- | text[] | 从左操作数中删除多个键/值对或string元素。 键/值对基于其键值进行匹配。 | “’{”“a”": ““b””, ““c””: ““d””}’::jsonb - ‘{a,c}’::text[]" |
- | integer | 删除指定索引的数组元素(负整数结尾)。如果顶层容器不是一个数组,那么抛出错误。 | “’[”“a”", ““b””]’::jsonb - 1" |
#- | text[] | 删除指定路径的域或元素(JSON数组,负整数结尾) | “’[”“a”", {"“b”":1}]’::jsonb #- ‘{1,b}’" |
3.其他json处理函数
参考文献:
http://www.postgres.cn/docs/10/functions-json.html