T-Sql
SQL Server 2016 可以從 JSON 中提取節點名稱嗎?
我想從 SQL Server 2016 中儲存為 nvarchar 值的任意格式良好的 JSON 文件中提取節點名稱及其路徑的完整列表。有沒有可靠的方法來做到這一點?
例如,對於 json 值:
DECLARE @json_doc nvarchar(4000) = '{"Name1":"Value1", "Name2":"Value2"}'
在查詢 @json_doc 時得到這個結果:
NODE_NAME $.Name1 $.Name2
選擇
$$ key $$從預設的 OPENJSON 架構。
DECLARE @json_doc nvarchar(4000) = '{"Name1":"Value1", "Name2":"Value2"}'; SELECT [key] FROM OPENJSON(@json_doc); GO
| 關鍵 | | :---- | | 姓名1 | | 姓名2 |
dbfiddle在這裡
添加到這個答案。
獲取列中的所有 JSON 鍵:
SELECT Keys.[key] FROM dbo.<table_name> t CROSS APPLY ( SELECT [key] [key] FROM OPENJSON((SELECT t.<column_name>)) ) Keys
例如, 表:
+------------------+ | JSONValues | +==================+ | {"myKey":1} | +------------------+ | {"myOtherKey":1} | +------------------+
查詢結果:
+------------+ | Result | +============+ | myKey | +------------+ | myOtherKey | +------------+
獲取所有 JSON 鍵,其中 JSON 是對像數組:
SELECT DISTINCT Keys.[key] FROM dbo.<table_name, sysname, sample_table> t CROSS APPLY ( SELECT x.[value] [value] FROM OPENJSON((SELECT t.<json_colum_name, sysname, sample_column>)) x ) ArrayJSON CROSS APPLY ( SELECT [key] [key] FROM OPENJSON((SELECT ArrayJSON.[value])) x ) Keys
表:
+----------------------------+ | JSONValues | +============================+ | [{"myKey":1},{"myKey2":2}] | +----------------------------+ | [{"myKey3":3}] | +----------------------------+
查詢結果:
+--------+ | Result | +========+ | myKey | +--------+ | myKey2 | +--------+ | myKey3 | +--------+