从 Json 获取 Json 字段值

Rak*_*esh 0 sql-server

我想从下面提到的 json 字符串中获取“OrderNumber”字段值。请建议最好的方法来获得相同的

DECLARE @JSON NVARCHAR(MAX)=

  '{"ErpOrderResponses":[{"OrderSubmitStatus":"Ok","TransactionId":"{5EAB3ADC-EB9B-47F7-98B8-1449E2CC0A6B}","OrderNumber":7000027934,"CustomerNumber":80038707,"Description":"Request Successful","ResponseCode":"Success","ResponseType":"None","Errors":[]}],"IsErpUnavailable":false,"IsSuccessful":true,"IsPartiallySuccessful":false,"IsValidationFailed":false,"IsFailed":false}'

    DECLARE @OrderNumber BIGINT = 
    (SELECT REPLACE(REPLACE(SUBSTRING(@JSON,CHARINDEX('OrderNumber',@JSON)+1,
                                                        CHARINDEX(',',@JSON,
                                                                        CHARINDEX('OrderNumber',@JSON)+1
                                                                )-CHARINDEX('OrderNumber',@JSON)
                                                        )
                                                        ,'RDERNUMBER":',''),',','') )
    --SELECT CAST( @OrderNumber AS BIGINT)

    SELECT  @OrderNumber 
Run Code Online (Sandbox Code Playgroud)

Ber*_*ner 5

假设您使用的是 SQL Server 2016 或更高版本,您可以使用 JSON_VALUE 函数来解析单个值:

SELECT  JSON_VALUE(@JSON,'$.ErpOrderResponses[0].OrderNumber');
Run Code Online (Sandbox Code Playgroud)

如果您要处理多行,我建议您使用 OPENJSON 以获得更好的性能:

SELECT 
    * 
FROM 
    OPENJSON(@JSON,'$.ErpOrderResponses')  
    WITH (OrderSubmitStatus varchar(20),OrderNumber bigint);
Run Code Online (Sandbox Code Playgroud)

文档:https : //docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-2017