# 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对象，路径不存在则返回空。 说明： DWS对象标识符支持以符号"#"结尾，为避免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) ``` |
   
