从 JSON 获取键名

Get key names from the JSON

如何从以下 JSON 中获取键名列表? (A1, A2)

DECLARE @json NVARCHAR(MAX);
SET @json = '{
    "Model": [{
        "A1": {
            "read": [
                "jcc",
                "rdbro"
            ],
            "write": [
                "jcc"
            ]
        },
        "A2": {
            "read": [
                "jcc",
                "rdbro",
                "rdbrw"
            ],
            "write": [
                "foo"
            ]
        }
    }]
}'

SELECT *
 FROM OPENJSON(@json, '$.Model') AS oj

下一条语句应该会为您提供密钥名称。 Model 是一个 JSON 数组,因此您需要一个额外的 APPLY 运算符和 OPENJSON() 使用默认模式调用,其中 returns table 带有列 keyvaluetype

Json数据:

DECLARE @json NVARCHAR(MAX);
SET @json = '{
    "Model": [{
        "A1": {
            "read": [
                "jcc",
                "rdbro"
            ],
            "write": [
                "jcc"
            ]
        },
        "A2": {
            "read": [
                "jcc",
                "rdbro",
                "rdbrw"
            ],
            "write": [
                "foo"
            ]
        }
    }]
}'

声明:

SELECT j2.[key] 
FROM OPENJSON(@json, '$.Model') j1
CROSS APPLY OPENJSON(j1.[value]) j2

输出:

----
key
----
A1
A2