SQL中OPENJSON函数JSON到表行数据转换

开发过程中用到了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);

结果:
SQL中OPENJSON函数JSON到表行数据转换_第1张图片


数值:

declare @json nvarchar(max)
set @json='{"mylist":[{"name":"cc","age":20},{"name":"ch","age":30}]}'
SELECT [key], value
FROM OPENJSON(@json,'$.mylist')

结果:

SQL中OPENJSON函数JSON到表行数据转换_第2张图片


取数值里值生成行数据

脚本:

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'
)

结果:

SQL中OPENJSON函数JSON到表行数据转换_第3张图片


如果想将表里单列里的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转换成字符串
 
  

结果:

SQL中OPENJSON函数JSON到表行数据转换_第4张图片


有不明白的可以多试下。

你可能感兴趣的:(程序人生)