MS SQL Server 2016 使用 JSON 方法获取值


这可能是

我没有看到的愚蠢的东西,但我无法设法让JSON_VALUEJSON_QUERY按照我期望的那样工作:

DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT *
FROM OPENJSON(@json)

返回正确的 3 行。

DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) is_json
  , JSON_VALUE(@json, '$') label
  , JSON_QUERY(@json, '$') label2

返回 1 行,但label NULLlabel2显示整个字符串。好的,但是:

DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) is_json
  , JSON_VALUE(@json, '$.1031') label
  , JSON_QUERY(@json, '$.1033') label2

返回 0 行。

编辑

我确实希望得到这样的结果:

is_json, label, label2
1, test-de, test-en

由于您的密钥以数字开头,因此您需要将其引号。我认为你所追求的是:

DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) AS is_json,
       JSON_VALUE(@json, '$."1031"') AS label,
       JSON_VALUE(@json, '$."1033"') AS label2;

或者,您可以使用WITH

DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) is_json,
       J.label1,
       J.label2
FROM OPENJSON(@json)
     WITH (label1 varchar(7) '$."1031"',
           label2 varchar(7) '$."1033"') J;

最新更新