0

我想在我的 sql-server 中解析一个 json-array。我想使用OPENJSONwithWITH将特定值解析为列。如何获取每个数组项的索引?

JSON_VALUE我知道,无论有没有,这都可以正常工作WITH

DECLARE @json NVARCHAR(MAX) = '[{"name":"Alpha"},{"name":"Bravo"},{"name":"Charlie"}]'

SELECT [key], JSON_VALUE(value, '$.name')
FROM OPENJSON(@json)

--  key | value
----------------------------------
--    0 | Alpha
--    1 | Bravo
--    2 | Charlie

但是当我添加时,WITH我似乎无法再访问key了。

SELECT [key], name
FROM OPENJSON(@json)
WITH (
  [key] INT, -- does not work
  name NVARCHAR(MAX)
)

--  key | name
----------------------------------
-- NULL | Alpha
-- NULL | Bravo
-- NULL | Charlie
4

1 回答 1

1

您需要使用OPENJSON()默认模式来获取每个数组项的键(作为您的第一次尝试)。文档中的注释说明

注意:仅当您将 OPENJSON 与默认架构一起使用并且不适用于显式架构时,才会返回 Key、Value 和 Type 列。

以下语句只是获取密钥并使用显式模式解析 JSON 的另一种选择:

DECLARE @json NVARCHAR(MAX) = '[{"name":"Alpha"},{"name":"Bravo"},{"name":"Charlie"}]';

SELECT j1.[key], j2.* 
FROM OPENJSON(@json) j1
CROSS APPLY OPENJSON (j1.[value]) WITH (name nvarchar(max)) j2

结果:

key name
---------
0   Alpha
1   Bravo
2   Charlie
于 2021-10-14T08:59:47.007 回答