SQLSERVER2008 解析JSON函數


解析JSON的sql函數腳本文件下載地址:https://files.cnblogs.com/files/YoungHeart/parseJSON.rar

使用場景:1,接口輸入比較復雜時可使用json傳輸,相比逗號隔開數據值的意義更明確,避免輸入參數過多,這個只需要一個json字符串參數。
                  2,在一下配置場景可使用json存儲,使用時再解析。不適合作為查詢條件。

使用方法

 
        DECLARE @parent_ID INT ,
            @Object_ID INT;
        DECLARE @index INT ,
            @rate_start FLOAT ,
            @rate_end FLOAT ,
            @diffId INT;
            
       --自己需要的json結果
        CREATE TABLE #temp_question_recommend_diff_config
            (
              [index] INT ,
              rate_start FLOAT ,
              rate_end FLOAT ,
              diffId INT
            );
        SELECT  *
        INTO    #temp_question_recommend_diff_config_json
        FROM    Xxyx_System.dbo.parseJSON('[{"index":0,"rate_start":100.00,"rate_end":80.00,"diffId":-1},{"index":1,"rate_start":80.00,"rate_end":70.00,"diffId":-1},{"index":2,"rate_start":70.00,"rate_end":60.00,"diffId":-1},{"index":3,"rate_start":60.00,"rate_end":0.00,"diffId":-1}]');
 
               
 
        SELECT  @parent_ID = Object_ID
        FROM    #temp_question_recommend_diff_config_json
        WHERE   ValueType = 'array';
  
               
        --解析json
        WHILE ( EXISTS ( SELECT 1
                         FROM   #temp_question_recommend_diff_config_json
                         WHERE  parent_ID = @parent_ID ) )
            BEGIN
 
                SELECT TOP 1
                        @Object_ID = Object_ID
                FROM    #temp_question_recommend_diff_config_json
                WHERE   parent_ID = @parent_ID;
 
                SELECT  @index = StringValue
                FROM    #temp_question_recommend_diff_config_json
                WHERE   parent_ID = @Object_ID
                        AND NAME = 'index';
                
                SELECT  @rate_start = StringValue
                FROM    #temp_question_recommend_diff_config_json
                WHERE   parent_ID = @Object_ID
                        AND NAME = 'rate_start';
                
                SELECT  @rate_end = StringValue
                FROM    #temp_question_recommend_diff_config_json
                WHERE   parent_ID = @Object_ID
                        AND NAME = 'rate_end';
                
                SELECT  @diffId = StringValue
                FROM    #temp_question_recommend_diff_config_json
                WHERE   parent_ID = @Object_ID
                        AND NAME = 'diffId';
                
                INSERT  INTO #temp_question_recommend_diff_config
                        ( [index] ,
                          rate_start ,
                          rate_end ,
                          diffId
                        )
                VALUES  ( @index , -- index - int
                          @rate_start , -- rate_start - float
                          @rate_end , -- rate_end - float
                          @diffId  -- diffId - int
                        );
 
                DELETE  #temp_question_recommend_diff_config_json
                WHERE   Object_ID = @Object_ID;
            END;
            
         --解析后的json結構     
        SELECT  *
        FROM    #temp_question_recommend_diff_config_json;
        
        --最終自己需要的數據
        SELECT  *
        FROM    #temp_question_recommend_diff_config;
                    
        DROP TABLE #temp_question_recommend_diff_config;
        DROP TABLE #temp_question_recommend_diff_config_json;

JSON解析結果:

 

重組后的數據結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM