MsSql解析JSON为表结构体

--=============  存储过程语句  =============--

/*

解析一层jaon数组,转为表形式输出

*/

ALTER PROCEDURE [dbo].[sp_getJSONFields]

@Json VARCHAR(MAX)

AS

BEGIN

SELECT @Json=REPLACE(@Json,'[','')

SELECT @Json=REPLACE(@Json,']','')

SET @Json = @Json+ ','

SELECT @Json=REPLACE(@Json,'{','')

SELECT @Json=REPLACE(@Json,'},',',;')

DECLARE @temp VARCHAR(1000)

DECLARE @temp_str VARCHAR(1000)

DECLARE @objName VARCHAR(300)

DECLARE @objValue VARCHAR(300)

DECLARE @fieldSql VARCHAR(MAX)

DECLARE @temp_ziduan VARCHAR(1000)

SET @fieldSql = ''

--大循环,循环对象数据中的对象

WHILE LEN(@Json)>0

BEGIN

SET @fieldSql = @fieldSql+ ' select '

--获取前面的一个对象

SELECT @temp=SUBSTRING(@Json,0,CHARINDEX(';',@Json,0))

SET @temp_str=@temp

--循环获取前面对象的字段

WHILE LEN(@temp)>0

BEGIN

SELECT @temp_ziduan = SUBSTRING(@temp,0,CHARINDEX(',',@temp,0))

SELECT @temp=RIGHT(@temp,LEN(@temp)-LEN(@temp_ziduan)-1)

SET @objName =left(@temp_ziduan,CHARINDEX(':',@temp_ziduan,0)-1)

SET @objValue =right(@temp_ziduan,len(@temp_ziduan)-CHARINDEX(':',@temp_ziduan,0))

SET @fieldSql=@fieldSql+REPLACE(@objValue,'"','''')+' as '+REPLACE(@objName,'"','')+','

END

SET @fieldSql = LEFT(@fieldSql,LEN(@fieldSql)-1)+' union all '

SELECT @Json=RIGHT(@Json,LEN(@Json)-LEN(@temp_str)-1)

END

SET @fieldSql=LEFT(@fieldSql,LEN(@fieldSql)-10)

EXEC (@fieldSql)

END

--=============  调用测试  =============--

传入JsonArr:

MsSql解析JSON为表结构体_第1张图片

传入JsonObject:

MsSql解析JSON为表结构体_第2张图片

你可能感兴趣的:(MsSql解析JSON为表结构体)