--============= 存储过程语句 =============--
/*
解析一层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:
传入JsonObject: