在SQL中查询JSON嵌套数组对象

时间:2017-11-17 06:11:17

标签: json sql-server-2016

我有以下JSON,我只需要查询名称属性值。

DECLARE @j NVARCHAR(4000) = N'{  
   "ArrayValue":[
        {
            "name": "XXX",
            "value": 10
        },
        {
            "name": "Memory123",
            "value": 20
        }
    ]
}'

以下是OPENJSON()

的结果
SELECT value as Name
FROM OPENJSON(@j, '$.ArrayValue')

Whcih将获得以下输出。

Name
---------------------------------------------------
{              "name": "Memory"          }
{              "name": "Memory123"          }

但是我需要以下格式输出。

Name
-----
Memory
Memory123

没有使用替换有没有更简单的方法?

1 个答案:

答案 0 :(得分:2)

您可以将ArrayValue定义为JSON列,然后使用CROSS APPLY获取名称值。这是一个例子:

DECLARE @j NVARCHAR(4000) = N'{  
   "ArrayValue":[
        {
            "name": "XXX",
            "value": 10
        },
        {
            "name": "Memory123",
            "value": 20
        }
    ]
}'
SELECT b.name
FROM OPENJSON(@j)
WITH (ArrayValue NVARCHAR(MAX) AS JSON) AS a
CROSS APPLY OPENJSON(a.ArrayValue)
WITH ([name] NVARCHAR(100)) AS b