我有以下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
没有使用替换有没有更简单的方法?
答案 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