开发过程中用到了MQ以JSON进行数据交互,接收过程中有部分数据不完整导致错误未能入库。偶然间看到SQL有OPENJSON函数可对JSON数据进行表数据转换。于是就有了下文,对学习的过程记录下。
默认情况下解析JSON串里的第一层元素:
脚本:
![]()
![]()
DECLARE @json NVARCHAR(MAX)
SET @json='{"name":"John","surname":"Doe","age":45,"skills":["SQL","C#","MVC"]}';
SELECT *
FROM OPENJSON(@json);
结果:
数值:
declare @json nvarchar(max)
set @json='{"mylist":[{"name":"cc","age":20},{"name":"ch","age":30}]}'
SELECT [key], value
FROM OPENJSON(@json,'$.mylist')
结果:
![](https://img-blog.csdn.net/20180112163928347)
取数值里值生成行数据
脚本:
declare @json nvarchar(max)
set @json='[{"name":"cc","age":20},{"name":"ch","age":30}]'
SELECT *
FROM OPENJSON(@json)
WITH (
myname varchar(50) '$.name',
age varchar(15) '$.age'
)
结果:
![](https://img-blog.csdn.net/20180112164119037)
如果想将表里单列里的JSON串输出为表行,通过将表里JSON字符列转化下(多行JSON合并为单列后 作为上面的@json参数传入即可)
SELECT *
FROM OPENJSON(
(
SELECT '['+STUFF((
select ',' + Replace(Replace(Replace(MsgJson,'\"','"'),'"{','{'),'}"','}')
from t_MqMsgInfo where MsgType='FK'
FOR xml path('')),
1,1,'')+']'
)
)
WITH (
ClientId varchar(15) '$.businessMsgData.clientId',
ClientName varchar(50) '$.businessMsgData.clientName'
)
FOR xml path('')主要是用来将多行合成一列,
STUFF将XML转换成字符串
结果:
![](https://img-blog.csdn.net/20180112164828153)
有不明白的可以多试下。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)