SQL Server查询JSON数组

问题描述:

我想在下面的结构中查询SQL Server 2016中的某些JSON,我想查找'key'具有特定值的所有记录。任何帮助如何做到这一点?SQL Server查询JSON数组

{ 
    "nodeDataArray": [{ 
     "key": "5B502176-E51A-48B7-B8F0-350984CFBCF2", 
     "category": "IFM" 
    }, { 
     "key": "1260263E-6111-47B2-9776-FE9BA5C90DCB", 
     "category": "IFM" 
    }, { 
     "key": "8AE454D3-944E-47BE-8CA9-049318DE213B", 
     "category": "IFM" 
    }, { 
     "key": "96B20972-F88C-44BA-84AA-C1F45BE5C7D5", 
     "category": "IFM" 
    } 
    }] 
} 

感谢,

马特

+0

你使用什么SQL Server版本?查询是否保证在此版本上运行? –

+0

如果您发布的是代码或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码样本”按钮(“{}”)以精确格式化并语法突出显示它! –

+0

SQL Server Version 2016 – mnt

DECLARE @json NVARCHAR(MAX) 


SET @json = N'{ 
    "nodeDataArray": [ 
    { 
     "key": "5B502176-E51A-48B7-B8F0-350984CFBCF2", 
     "category": "IFM" 
    }, 
    { 
     "key": "1260263E-6111-47B2-9776-FE9BA5C90DCB", 
     "category": "IFM" 
    }, 
    { 
     "key": "8AE454D3-944E-47BE-8CA9-049318DE213B", 
     "category": "IFM" 
    }, 
    { 
     "key": "96B20972-F88C-44BA-84AA-C1F45BE5C7D5", 
     "category": "IFM" 
    } 
] 
}' 

SELECT 
    JSON_VALUE(nda.value, '$.key') AS [key], 
    JSON_VALUE(nda.value, '$.category') AS [category] 
FROM OPENJSON(@json, '$.nodeDataArray') AS nda 
WHERE JSON_VALUE(nda.value, '$.key') = '1260263E-6111-47B2-9776-FE9BA5C90DCB' 
+0

关闭,但这不是我有的结构。我有一个nodeDataArray数组,其中包含值... – mnt

+0

这是我需要的,非常感谢。 – mnt

+0

你会介意将答案标记为正确吗? –

如果你是在SQL 2016年,看看这篇文章: JSON Data (SQL Server)

如果您不在SQL 2016上,则不支持本机JSON。你最好的选择是用.NET编写一些东西,并从SQL SP或函数中调用它(谷歌可以帮你开始使用它)。

+0

我在SQL Server 2016上。问题的关键在于直接查询数据库以查找包含特定键值的所有记录(其中包含数百个包含JSON数据的记录)。这个语法对我来说不是很清楚。我可以编写一个.Net函数来做到这一点,但想知道我是否可以简单地发送一个查询来获取我的信息... – mnt