美文网首页
MsSql解析JSON为表结构体

MsSql解析JSON为表结构体

作者: forstar | 来源:发表于2017-04-01 09:40 被阅读0次

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

    /*

    解析一层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:


    相关文章

      网友评论

          本文标题:MsSql解析JSON为表结构体

          本文链接:https://www.haomeiwen.com/subject/ditiottx.html