达梦对JSON格式的处理
简介
JSON是一种存储文本信息的语法格式,采用轻量级的纯文本格式表示数据的层级关系,在应用接口数据传递中使用广泛。
DM支持JSON数据的存储和查询,在DM库中JSON以字符串形式存储。
支持的数据类型
包括String,number,boolean,object,array;这些数据类型可以嵌套使用。
可以使用的函数
Json_value(col_name, json_name):获取json值。有两个参数,分别为列名和要查询的JSON路径表达式。
Json_query():返回一个或多个JSON数据。
测试
object类型
创建JSON数据测试表JSON_TEST
INSERT INTO JSON_TEST VALUES(1,'{"NAME":"TOM","SEX":"M","AGE":"20"}');
SELECT *FROM JSON_TEST;
使用json_value函数查询NAME
SELECT JSON_VALUE(NAME,'$.AGE') FROM JSON_TEST;
数组类型
INSERT INTO JSON_TEST VALUES(2, '["DM6","DM7","DM8"]');
SELECT *FROM JSON_TEST;
数组中的值使用下标获取,数组下标从0开始。
SELECT JSON_VALUE(NAME,'$[0]') FROM JSON_TEST WHERE ID = 2;
约束条件
DM推荐在插入数据时对格式进行检查,提供了 IS JSON/IS NOT JSON条件用于判断JSON数据的合法性,判断正确时,分别返回true/false。
示例
创建测试表,对CONTENT列添加IS JSON条件,插入数据。
CREATE TABLE JSON_TEST_02(ID INT, CONTENT VARCHAR CONSTRAINT JSON_CHECK CHECK(CONTENT IS JSON));
INSERT INTO JSON_TEST_02 VALUES(1,'{"NAME":"TOM","SEX":"M","AGE":"20"}');
INSERT INTO JSON_TEST_02 VALUES(2,'TOM');
SELECT *FROM JSON_TEST_02;
可见,违反IS JSON条件的数据插入失败。
IS NOT JSON的作用相反,可以使用此条件排除JSON数据。
CREATE TABLE JSON_TEST_03(ID INT, CONTENT VARCHAR CONSTRAINT JSON_CHECK_02 CHECK(CONTENT IS NOT JSON));
INSERT INTO JSON_TEST_03 VALUES(1,'{"NAME":"TOM","SEX":"M","AGE":"20"}');
JSON_QUERY
此函数可返回多条记录中的JSON值,必须指定 WITH WRAPPER(以array)的形式返回字符串)。单值返回时,标量需指定WITH WRAPPER,object或array不需要。
INSERT INTO JSON_TEST VALUES(1,'{"NAME":"TOM","SEX":"M","AGE":"20"}');
INSERT INTO JSON_TEST VALUES(2,'{"NAME":"LI","SEX":"W","AGE":"45"}');
INSERT INTO JSON_TEST VALUES(3,'{"NAME":"TANG","SEX":"M","AGE":"77"}');
SELECT *FROM JSON_TEST;
SELECT JSON_QUERY(NAME,'$.NAME' WITH WRAPPER) FROM JSON_TEST;
涉及的视图
与JSON相关的视图有DBA_JSON_COLUMNS 、 USER_JSON_COLUMNS 和
ALL_JSON_COLUMNS 。
DBA_JSON_COLUMNS
显示数据库中所有JSON数据信息。
USER_JSON_COLUMNS显示当前用户拥有的JSON信息,ALL_JSON_COLUMNS显示当前用户有权访问的JSON数据信息。
列显示规则
上述视图中显示的列与定义时使用的“||”,“and”,“OR”等运算符有关
- 条件中有多列时,多列都显示。
- 使用AND时,涉及的列都显示。
- 使用OR时,所有列都不显示。
- 使用IS NOT JSON条件时,该列不显示。