达梦对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条件时,该列不显示。
 

 

posted on 2022-04-16 14:04  &大飞  阅读(4729)  评论(0编辑  收藏  举报

导航