JSON数据类型
JSON存储类型
数据采用大对象存储,支持最大2GB文本。
JSON数据格式
JSON数据支持存储值的基础类型为string、bool、number、null。
说明:
注意以下JSON数据都是以JSON串方式展示,所以数据外部应和原有char类型一样,由单引号
'
包裹。
json string是由双引号包裹的字符串:
sql'"中文"'
json bool是小写true false:
sql'true' 'false'
json number:
sql'1' '-1' '10.2'
json null:
sql'null'
json数组是包含在 [ ] 字符之间以逗号分割的值列表:
sql'["abc", true, false, 1, 1.1, null]'
json对象是包含在 { }字符之间的多组键值对,键值必须为string:
sql'{"key1": "value", "key2": true, "key3": false, "key4": 1, "key5": 1.1, "key6": null}'
JSON路径表达式(JSONPath)
虚谷支持一个路径表达式来检索JSON数据中特定的元素。
由$字符打头,代表JSON文档本身。
sql'{"test": 1}'->'$' = {"test": 1}
(.)点字符用于寻找对象中的键值对。
sql'{"test": 1}'->'$.test' = 1 -- 或 '{"test": 1}'->'$."test"' = 1
[N]用于寻找数组中下标为N的元素。
sql'[1,3,5,7]'->'$[1]' = 3
[M to N]用于寻找数组中下标M到N的元素集合。
sql'[1,3,5,7]'->'$[1 to 3]' = [3,5,7]
last关键字做为数组最后一个元素或非数组元素的同义词。
sql'[1,3,5,7]'->'$[last]' = 7 -- 或 last - N 作为相对寻址 '[1,3,5,7]'->'$[last - 1 to last]' = [5,7] -- 非数组元素 与直接使用 $ 相同 '"123"'->'$[last]' = "123" '{"a": 1}'->'$[last]' = {"a": 1}
*通配符,代表全量元素。
sql'[1,2,3,4]'->'$[*]' = [1,2,3,4] -- 或 '{"a": 1,"b": 2}'->'$.*' = {"a": 1,"b": 2}
**深度查找。
sql'[1,2,[3,3,3],4]'->'$**[1]' = [2,3] -- 或 '{"a": 1,"b": {"a": 2}}'->'$**.a' = [1,2]
JSON比较与排序
JSON类型支持=、<> 、> 、>= 、< 、 <=比较运算符。
以下列表展示了JSON类型排序规则,优先级从最高到最低:
- BOOL
- ARRAY
- OBJECT
- STRING
- NUMBER
- NULL
相同类型按照以下排序规则:
BOOL
false小于true。ARRAY
由第一个有差异的元素决定。该位置较小的数组首先排序。如果较短的数组的所有值都等于长数组中的的对应值,则较短数组首先排序。json[] < ["a"] < ["ab"] < ["ab", "cd", "ef"] < ["ab", "ef"]
OBJECT
由第一个有差异的键值对决定。键小优先排序,键一样,值小优先排序。如果较短的对象的所有键值对都包含在长对象中,则较短的对象优先排序。存在相同的键值,则相等。json{} < {"a": 1} < {"a": 2} < {"ab": 1} < {"b": 1} < {"b": 1, "c": 1} {"a": 1, "b": 2} = {"b": 2, "a": 1}
STRING
按照字典序排序。NUMBER
按照大小排序。
JSON类型的增删查改
JSON类型必须是符合JSON格式的字符串类型。
示例:
sql
-- create table
create table t_json(c_id int primary key, c_json json);
-- insert
insert into t_json values(1, '[1,2,3]')(2, '{"中文key": "中文value"}');
-- select
select * from t_json;
C_ID|C_JSON |
----+--------------------+
1|[1, 2, 3] |
2|{"中文key": "中文value"}|
-- update
update t_json set c_json='{"key": "value"}' where c_id = 1;
-- select
select * from t_json;
C_ID|C_JSON |
----+--------------------+
1|{"key": "value"} |
2|{"中文key": "中文value"}|
-- delete
delete from t_json where c_id = 1;
-- select
select * from t_json;
C_ID|C_JSON |
----+--------------------+
2|{"中文key": "中文value"}|
数据类型特性表
数据类型 | 长度 | Java数据类型 | 长度 | 封装器类 | 说明 |
---|---|---|---|---|---|
JSON | 2GB | Java.sql.String | 变长 | JSON | 存储JSON数据格式字符串 |