首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Json列表比较- Server 2016

Json列表比较- Server 2016
EN

Stack Overflow用户
提问于 2017-08-22 15:15:58
回答 1查看 2.6K关注 0票数 0

我正在使用Server 2016,目前正在存储、检索和解析JSON数据。我的问题在清单上比较。

示例数据:表有2列

代码语言:javascript
复制
Column1 - Data = 'Microsoft'  
Column2 - Data = '{"info":{"type":1,"address":   {"town":"Bristol","county":"Avon","country":"England"},"tags":["Sport", "Water polo"]},"type":"Basic"}'

查询:

代码语言:javascript
复制
SELECT JSON_QUERY(Column2, '$.info.tags') from dbo.sample_table;

输出:

代码语言:javascript
复制
["Sport", "Water polo"]

我如何匹配,如果我需要检查“水球”,“运动”?Server 2016中的JSON库是否允许检查数组内容,而不管数据的顺序如何?

提亚

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-22 15:55:45

因此,基本上,您需要比较JSON结构中的tags数组。如果标记的顺序无关,则可以将tags数组转换为表结果集,并使用标准的where value in (select... SQL子句。

第一件事是将标记转换为SQL结果集:

代码语言:javascript
复制
SELECT TagsData.[value]
FROM sample_table T CROSS APPLY OPENJSON (T.Column2, '$.info.tags') AS TagsData

..then,你需要把它和你所拥有的任何东西进行比较。例如,为了测试目的,我使用了本地声明的JSON字符串:

代码语言:javascript
复制
DECLARE @json NVARCHAR(4000) = N'
    {
        "info":{"type":1,"address": {"town":"Bristol","county":"Avon","country":"England"},
        "tags":["Water polo", "Sport"]},"type":"Basic"
    }';

SELECT [value]
FROM OPENJSON(@json,'$.info.tags')

(注意["Water polo", "Sport"]更改的顺序)

..and测试(如果它不包含在Column2中)

代码语言:javascript
复制
DECLARE @json NVARCHAR(4000) = N'
    {
        "info":{"type":1,"address": {"town":"Bristol","county":"Avon","country":"England"},
        "tags":["Water polo", "Sport"]},"type":"Basic"
    }';

SELECT [value]
FROM OPENJSON(@json,'$.info.tags')
where [value] not in
(
SELECT TagsData.[value]
FROM TestTable T CROSS APPLY OPENJSON (T.Column2, '$.info.tags') AS TagsData
)

如果结果集是空的-您的数组是相同的,它们确实匹配(不管它们的顺序)。如果结果集包含任何数据,则表示这两个JSON数组的实际差异。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45821459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档