如何跳过SQL Json_Value函数中区分大小写的部分



我使用了"JSON_VALUE">函数。它可以根据我的要求正常工作。我想知道如何跳过json字段中区分大小写的部分。请查看我的示例jsonData

Json数据:-

{
"factoryID": "4",
"yearID": "2",
"loggedInUserID": "43",
"pageIndex": "1",
"pageSize": "10",
"searchString": "",
"whereString": ""
}

但当我在Json_Value中以Camel大小写给出字段名称时,它返回null。请建议如何跳过"中的区分大小写;Json_ Value

SQL:-

set @FactoryID = JSON_VALUE(@JsonData,'$.FactoryID')
set @YearID = JSON_VALUE(@JsonData,'$.YearID')

对于Json细节(阵列(:-

SELECT          
JSON_VALUE(A.value,'$.FactoryID')FactoryID,
JSON_VALUE(A.value,'$.YearID')YearID,
JSON_VALUE(A.value,'$.CreatedUserID')CreatedUserID,
JSON_VALUE(A.value,'$.ModifiedUserID')ModifiedUserID,
JSON_VALUE(A.value,'$.TempID')TempID
FROM OPENJSON(@JsonDetail) as A

恐怕没有内置的方法可以做到这一点
但是有几个选项可用:

  1. 您可以使用返回一组(keyvaluetype(的OPENJSON,并直接使用键/值对(尽管在您需要的值是对象的情况下,这种方法不起作用(:

    DECLARE @json VARCHAR(500) = '{
    "factoryID": "4",
    "yearID": "2",
    "loggedInUserID": "43",
    "pageIndex": "1",
    "pageSize": "10",
    "searchString": "",
    "whereString": ""
    }';
    DECLARE @FactoryID INT,
    @YearID INT;
    SELECT @YearID = IIF(LOWER([key]) = 'yearid', [value], @YearID),
    @FactoryID = IIF(LOWER([key]) = 'factoryid', [value], @FactoryID)
    FROM OPENJSON(@json);
    SELECT @YearID AS YearID,
    @FactoryID AS FactoryID;
    
  2. 另一种选择是创建一个自定义CLR函数,以不区分大小写的方式解析JSON。

最新更新