Sql-Server

使用 OPENJSON 列舉 JSON 數組

  • December 16, 2021

我一直在努力將我的一些基於 XML 的儲存過程轉換為 JSON,但我遇到了一個問題。

使用 OPENXML,我可以訪問 mp:id,因此當我解析 XML 時,我可以在查詢中訪問元素及其在 XML 中的位置。

我想用 OPENJSON 做類似的事情。這是一個例子

DECLARE @JSON VARCHAR(MAX) =
'[
 {"Fruit":"Apple"},
 {"Fruit":"Banana"},
 {"Fruit":"Pineapple"}
]'

SELECT Fruit
FROM OPENJSON(@JSON,'$')
   WITH (Fruit VARCHAR(24) '$.Fruit')

對於每種水果,我也希望有它的位置(即,1 代表蘋果,2 代表香蕉,等等)。

有誰知道如何用 OPENJSON 做到這一點?

使用不帶 OPENJSONWITH來投影每個元素的位置。例如

DECLARE @JSON VARCHAR(MAX) =
'[
 {"Fruit":"Apple"},
 {"Fruit":"Banana"},
 {"Fruit":"Pineapple"}
]'

SELECT cast([key] as int) ix, json_value(value,'$.Fruit') Fruit
FROM OPENJSON(@JSON,'$')
   

輸出

ix          Fruit
----------- -------------
0           Apple
1           Banana
2           Pineapple
   

引用自:https://dba.stackexchange.com/questions/304001