求一个数据库函数解析json 如下图要求

求一个数据库函数解析json 如下图要求,第1张

数据库只是用来存储数据的,为什么不把处理数据的部分放在后台?

在这里你需要了解以下几个知识点。

在sqlserver 中存储json ,需要用字符串类型进行存储,一般用nvarchar()或 varchar()进行存储。

openJson:打开Json字符串

IsJson:判断一个字符串是不是合法的Json格式。是返回1,否返回0,null返回null。

Json_Value:从Json字符串中提取值。

Json_Query:Json字符串中提取对象或数组。

Json_Modify:更新Json字符串中的属性值,并返回更新的Json字符串

然后参考图片的需求,获取输入key值中的value字段可以得到如下sql语句。

从JSON中获取输入B的JSON对象

SELECT JSON_QUERY(json, CONCAT('$.',key)) INTO K_VAL

从B的JSON对象中,获取value字段的值

SELECT JSON_VALUE(K_VAL, '$.value') INTO JSONVALUE

最终我们的声明的函数大概是:

CREATE FUNCTION PARSEJSON(json VARCHAR(2000), key VARCHAR(200))

RETURNS VARCHAR

BEGIN

declare JSONVALUE VARCHAR

declare K_VAL VARCHAR

SELECT JSON_QUERY(json, CONCAT('$.',key)) INTO K_VAL

SELECT JSON_VALUE(K_VAL, '$.value') INTO JSONVALUE

return JSONVALUE

END

我也遇到过这个,数据库拿到这个数据是字符串,奇怪的是前后有两个对双引号,JSON.parse()转json就出错了。。我解决是用正则去掉前后的双引号,然后得到的就是存进去的字符串的样子了,然后在转json就成功了。

1、假如json字符串的最大长度不会超过1024字节,那么我们可以定义表结构varchar(1024)。如下图,我们定义一个表t_save_json,有一个自增的id字段以及json字段保存json字符串。

2、如果json字符串中字符是双引号标记的,如{"name":"Q花荣","age":18,"a":"第一条信息"}。那么我们写sql语句保存到数据库时直接用引号括起来就行。如:insert into t_save_json set json = '{"name":"Q花荣","age":18,"a":"第一条信息"}'

3、如果json字符串中字符是单引号标记的,如{'name':'Q花荣','age':18,'a':'第二条信息'}。那么通常的做法需要对单引号进行转义,写sql语句时连续两个''表示单引号。如:insert into t_save_json set json = '{''name'':''Q花荣'',''age'':18,''a'':''第二条信息''}'

但笔者发现mysql中,sql中用双引号来标记json字符串也可以,一般比较少用,笔者也学习了。如:insert into t_save_json set json = "{'name':'Q花荣','age':18,'a':'第三条信息'}"

4、如果json字符串长度太大,那么我们建表时还是应该选择TEXT类型。TEXT采用字符存储,专门为存储大数据而设计。如下图,我们定义表t_save_json_2,json字段类型为TEXT,保存大字符串。

5、使用相同的sql语句,保存json字符串到表t_save_json_2中。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6705887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存