Skip to content

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类型排序规则,优先级从最高到最低:

  1. BOOL
  2. ARRAY
  3. OBJECT
  4. STRING
  5. NUMBER
  6. 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数据类型长度封装器类说明
JSON2GBJava.sql.String变长JSON存储JSON数据格式字符串