SQL 查询以获取 Json 数组的计数
SQL Query to get the count of Json Array
我有以下 Json 对象。如何获取对象数组的计数。
{
"Model": [
{
"ModelName": "Test Model",
"Object": [
{
"ID": 1,
"Name": "ABC"
},
{
"ID": 11,
"Name": "ABCD"
},
]
}]}
我尝试了以下查询,但似乎 JSON_Length 不可用。
SELECT ModelName,
JSON_LENGTH(JsonData, '$.Model[0].Object')
FROM TabA
预期的输出应该是
ModelName COUNT
Test Model 2
如果您有有效的 JSON(目前您有一个尾随逗号(,
_ 在您的一个右大括号 (}
) 之后),那么您可以使用 OPENJSON
和 COUNT
:
DECLARE @JSON nvarchar(MAX) = N'{
"Model": [
{
"ModelName": "Test Model",
"Object": [
{
"ID": 1,
"Name": "ABC"
},
{
"ID": 11,
"Name": "ABCD"
}
]
}]}';
SELECT M.ModelName,
COUNT(O.[key]) AS [Count]
FROM (VALUES(@JSON))V(J)
CROSS APPLY OPENJSON(V.J)
WITH(ModelName varchar(20) '$.Model[0].ModelName',
[Object] nvarchar(MAX) '$.Model[0].Object' AS JSON) M
CROSS APPLY OPENJSON(M.[Object]) O
GROUP BY M.ModelName;
我有以下 Json 对象。如何获取对象数组的计数。
{
"Model": [
{
"ModelName": "Test Model",
"Object": [
{
"ID": 1,
"Name": "ABC"
},
{
"ID": 11,
"Name": "ABCD"
},
]
}]}
我尝试了以下查询,但似乎 JSON_Length 不可用。
SELECT ModelName,
JSON_LENGTH(JsonData, '$.Model[0].Object')
FROM TabA
预期的输出应该是
ModelName COUNT
Test Model 2
如果您有有效的 JSON(目前您有一个尾随逗号(,
_ 在您的一个右大括号 (}
) 之后),那么您可以使用 OPENJSON
和 COUNT
:
DECLARE @JSON nvarchar(MAX) = N'{
"Model": [
{
"ModelName": "Test Model",
"Object": [
{
"ID": 1,
"Name": "ABC"
},
{
"ID": 11,
"Name": "ABCD"
}
]
}]}';
SELECT M.ModelName,
COUNT(O.[key]) AS [Count]
FROM (VALUES(@JSON))V(J)
CROSS APPLY OPENJSON(V.J)
WITH(ModelName varchar(20) '$.Model[0].ModelName',
[Object] nvarchar(MAX) '$.Model[0].Object' AS JSON) M
CROSS APPLY OPENJSON(M.[Object]) O
GROUP BY M.ModelName;