
# JSON/JSONB操作符
表1json和jsonb通用操作符 
| 操作符   | 左操作数类型             | 右操作数类型   | 返回类型    | 描述                                                                                                                                                                                                                                                                     | 示例                                                                                                             |
|:---|:---|:---|:---|:---|:---|
| -\>   | Array-json(b)      | int      | json(b) | 获得array-json元素。下标不存在返回空。                                                                                                                                                                                                                                               | ``` SELECT '[{"a":"foo"}, {"b":"bar"}, {"c":"baz"}]'::json->2; ?column? ------------- {"c":"baz"} (1 row) ```  |
| -\>   | object-json(b)     | text     | json(b) | 通过键获得值。不存在则返回空。                                                                                                                                                                                                                                                        | ``` SELECT '{"a":{"b":"foo"}}'::json->'a'; ?column? ------------- {"b":"foo"} (1 row) ```                      |
| -\>\> | Array-json(b)      | int      | text    | 获得array-json元素。下标不存在返回空。                                                                                                                                                                                                                                               | ``` SELECT '[{"a":"foo"}, {"b":"bar"}, {"c":"baz"}]'::json->>2; ?column? ------------- {"c":"baz"} (1 row) ``` |
| -\>\> | object-json(b)     | text     | text    | 通过键获得值。不存在则返回空                                                                                                                                                                                                                                                         | ``` SELECT '{"a":{"b":"foo"}}'::json->>'a'; ?column? ------------- {"b":"foo"} (1 row) ```                     |
| #\>   | container-json (b) | text\[\] | json    | 获取在指定路径的JSON对象，路径不存在则返回空。 说明： DataArts Fabric SQL对象标识符支持以符号"#"结尾，为避免a#\>b解析过程出现歧义，因此操作符"#\>"前后需要增加空格，否则解析报错。 | ``` SELECT '{"a":{"b":{"c":1}}}'::json #> '{a, b}'; ?column? ---------- {"c":1} (1 row) ```                    |
| #\>\> | container-json (b) | text\[\] | text    | 获取在指定路径的JSON对象，路径不存在则返回空。                                                                                                                                                                                                                                              | ``` SELECT '{"a":{"b":{"c":1}}}'::json #>> '{a, b}'; ?column? ---------- {"c":1} (1 row) ```                   |
   
表2jsonb支持的操作符 
| 操作符                                                                                         | 右操作类型    | 返回类型  | 描述                           | 示例                                                                                                                                                          |
|:---|:---|:---|:---|:---|
| =                                                                                           | jsonb    | bool  | 判断两个jsonb的大小关系。同函数jsonb_eq   | ``` SELECT '{"a":{"b":{"c":1}}}'::jsonb = '{"a":{"b":{"c":1}}}'::jsonb; ?column? ---------- t (1 row) ```                                                   |
| \<\>                                                                                        | jsonb    | bool  | 判断两个jsonb的大小关系。同函数jsonb_ne   | ``` SELECT '{"a":{"b":{"c":1}}}'::jsonb <> '{"a":{"b":{"c":1}}}'::jsonb; ?column? ---------- f (1 row) ```                                                  |
| \<                                                                                          | jsonb    | bool  | 判断两个jsonb的大小关系。同函数jsonb_lt   | ``` SELECT '{"a":{"b":{"c":2}}}'::jsonb < '{"a":{"b":{"c":1}}}'::jsonb; ?column? ---------- f (1 row) ```                                                   |
| \>                                                                                          | jsonb    | bool  | 判断两个jsonb的大小关系。同函数jsonb_gt。  | ``` SELECT '{"a":{"b":{"c":2}}}'::jsonb > '{"a":{"b":{"c":1}}}'::jsonb; ?column? ---------- t (1 row) ```                                                   |
| \<=                                                                                         | jsonb    | bool  | 判断两个jsonb的大小关系。同函数jsonb_le。  | ``` SELECT '{"a":{"b":{"c":2}}}'::jsonb <= '{"a":{"b":{"c":1}}}'::jsonb; ?column? ---------- f (1 row) ```                                                  |
| \>=      | jsonb    | bool  | 判断两个jsonb的大小关系。同函数jsonb_ge。  | ``` SELECT '{"a":{"b":{"c":2}}}'::jsonb >= '{"a":{"b":{"c":1}}}'::jsonb; ?column? ---------- t (1 row) ```                                                  |
| ?                                                                                           | text     | bool  | 键/元素的字符串是否存在JSON值的顶层         | ``` SELECT '{"a":1, "b":2}'::jsonb ? 'b'; ?column? ---------- t (1 row) ```                                                                                 |
| ?\|                                                                                         | text\[\] | bool  | 这些数组字符串中的任何一个是否作为顶层键存在。      | ``` SELECT '{"a":1, "b":2, "c":3, "d":4}'::jsonb ?| '{a, b, e}'::text[]; ?column? ---------- t (1 row) ```                                                  |
| ?\&      | text\[\] | bool  | 是否所有这些数组字符串都作为顶层键存在。         | ``` SELECT '{"a":1, "b":2, "c":3, "d":4}'::jsonb ?& '{a, b, c}'::text[]; ?column? ---------- t (1 row) ```                                                  |
| \<@      | jsonb    | bool  | 左边的JSON的所有项是否全部存在于右边JSON的顶层。 | ``` SELECT '{"b":3}'::jsonb <@ '{"a":{"b":{"c":2}}, "b":3}'::jsonb; ?column? ---------- t (1 row) ```                                                       |
| @\>                                                                                         | jsonb    | bool  | 左边的JSON的顶层是否包含右边JSON的顶层所有项。  | ``` SELECT '{"a":{"b":{"c":2}}, "b":3}'::jsonb @> '{"b":3}'::jsonb; ?column? ---------- t (1 row) ```                                                       |
| \|\|      | jsonb    | jsonb | 两个jsonb对象合并成一个。              | ``` SELECT '{"a":1, "b":2}'::jsonb || '{"c":3, "d":4}'::jsonb; ?column? ---------------------------------- {"a": 1, "b": 2, "c": 3, "d": 4} (1 row) ```     |
| -                                                                                           | text     | jsonb | 删除jsonb对象删除指定的键值对。           | ``` SELECT '{"a":1, "b":2}'::jsonb - 'a'; ?column? ---------- {"b": 2} (1 row) ```                                                                          |
| -   | text     | jsonb | 删除jsonb对象删除指定的键值对。           | ``` SELECT '{"a":1, "b":2, "c":3, "d":4}'::jsonb - '{a, b}'::text[]; ?column? ------------------ {"c": 3, "d": 4} (1 row) ```                               |
| -       | int      | jsonb | 删除jsonb数组中下标对应的元素。           | ``` SELECT '["a", "b", "c"]'::jsonb - 2; ?column? ------------ ["a", "b"] (1 row) ```                                                                       |
| #-                                                                                          | text\[\] | jsonb | 删除jsonb对象中路径对应的键值对。          | ``` SELECT '{"a":{"b":{"c":{"d":1}}}, "e":2, "f":3}'::jsonb #- '{a, b}'::text[]; ?column? --------------------------- {"a": {}, "e": 2, "f": 3} (1 row) ``` |
   
