ai didi

sql-server - 从openjson SQL Server 2016中的嵌套数组中删除对象

转载 作者:行者123 更新时间:2023-12-03 11:24:19 24 4
gpt4 key购买 nike

我要删除 "AttributeName" : "Manufacturer"来自 SQL Server 2016 中的以下 json:

declare @json nvarchar(max) = '[{"Type":"G","GroupBy":[],
"Attributes":[{"AttributeName":"Class Designation / Compressive Strength"},{"AttributeName":"Size"},{"AttributeName":"Manufacturer"}]}]'

这是我尝试过但不起作用的查询
select JSON_MODIFY((
select JSON_Query(@json, '$[0].Attributes') as res),'$.AttributeName.Manufacturer', null)

最佳答案

这是使用 for json 的工作解决方案和 open json .重点是:

  • 确定您要删除的项目并将其替换为 NULL .这是由 JSON_MODIFY(@json,'$[0].Attributes[2]', null) 完成的.我们只是说,取 Attributes 中的第二个元素并将其替换为 null
  • 将此数组转换为行集。我们需要以某种方式摆脱这个 null元素,这是我们可以通过 where [value] is not null 在 SQL 中轻松过滤的内容
  • 将其全部组装回原始 JSON。这是由 FOR JSON AUTO 完成的

  • 请记住此类 JSON 数据转换的一个重要方面:

    JSON 旨在用于信息交换或最终存储信息。但是您应该避免在 SQL 级别上进行更复杂的数据操作。

    无论如何,解决方案在这里:
    declare @json nvarchar(max) = '[{"Type": "G","GroupBy": [],"Attributes": [{"AttributeName": "Class Designation / Compressive Strength"}, {"AttributeName": "Size"}, {"AttributeName": "Manufacturer"}]}]';            

    with src as
    (
    SELECT * FROM OPENJSON(
    JSON_Query(
    JSON_MODIFY(@json,'$[0].Attributes[2]', null) , '$[0].Attributes'))
    )
    select JSON_MODIFY(@json,'$[0].Attributes', (
    select JSON_VALUE([value], '$.AttributeName') as [AttributeName] from src
    where [value] is not null
    FOR JSON AUTO
    ))

    关于sql-server - 从openjson SQL Server 2016中的嵌套数组中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47092199/

    24 4 0
    文章推荐: deployment - 部署后出现ClickOnce错误-计算出的哈希值与 list 中指定的值不同
    文章推荐: vim - 如何在vim中编辑多列中的文本
    文章推荐: windows-xp - 什么是适合 Windows XP 的 BASIC 编译器?
    文章推荐: javascript - 将点击事件添加到元素,但不添加 Angular 子元素
    行者123
    个人简介

    我是一名优秀的程序员,十分优秀!

    滴滴打车优惠券免费领取
    滴滴打车优惠券
    全站热门文章
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com