如何删除以下JSON中的所有元素,其中‘name="测试高清模块2"和Team="Help Desk"?’

{
    "Content":  {
                    "Modules":  [
                                    {
                                        "ID":  2,
                                        "Name":  "Test HD Module 2",
                                        "Description": "This module opens the Google website.",
                                        "Team":  "Help Desk",
                                        "Is_Admin":  "No",
                                        "Location":  "Server",
                                        "Client_Facing":  "No",
                                        "Action":  "Website",
                                        "Image_Name":  "teamviewer",
                                        "Image_Path":  "C:Temp/Userss",
                                        "Is_Popup":  false,
                                        "Popup_Text":  "",
                                        "Submodule":  "false",
                                        "Is_Editable":  "true"
                                    },
                                    {
                                        "ID":  3,
                                        "Name":  "Test HD Module 2",
                                        "Team":  "Server",
                                        "Description": "This module opens the website.",
                                        "Is_Admin":  "No",
                                        "Location":  "Server",
                                        "Client_Facing":  "No",
                                        "Action":  "Website",
                                        "Image_Name":  "device-info",
                                        "Image_Path":  "C:Temp/Userss",
                                        "Is_Popup":  true,
                                        "Popup_Text":  "Are you sure you want to run Test HD Module 3?",
                                        "Submodule":  "false",
                                        "Is_Editable":  "false"
                                    }
                                ],
                    "Sub-Modules":  [
                                        {
                                            "ID":  4,
                                            "Name":  "Test HD Sub-Module 3",
                                            "Team":  "Help Desk",
                                            "Is_Admin":  "No",
                                            "Location":  "Server",
                                            "Client_Facing":  "No",
                                            "Action":  "CMD",
                                            "Action_Text":  "",
                                            "Image_Name":  "device-info",
                                            "Image_Path":  "C:Temp/Users",
                                            "Is_Popup":  "false",
                                            "Popup_Text":  "",
                                            "Submodule":  "true",
                                            "Is_Editable":  "false"
                                        }
                                    ]
                }
}

我试过使用下面的方法,但没有成功.

$JSON | Where-Object {$_.Modules.Name -ne "Test HD Module 2" -and $_.Modules.Team -ne "Help Desk" }

有没有更简单的方法来过滤JSON?我基本上想要相同的JSON,但删除了这些元素(我需要保留‘子模块’信息).在过滤JSON时,WHERE对象是否是正确的路径?

推荐答案

我相信你要找的表达是:

-not ($_.Name -eq "Test HD Module 2" -and $_.Team -eq "Help Desk")

与您当前拥有的表达式不同,例如,该表达式将排除包含Name != Test HD Module 2的任何对象.

如果要更新对象,可以使用以下方法:

$json = Get-Content path\to\myjson.json -Raw | ConvertFrom-Json
$json.Content.Modules = @(
    $json.Content.Modules | Where-Object {
        -not ($_.Name -eq "Test HD Module 2" -and $_.Team -eq "Help Desk")
    }
)
$json | ConvertTo-Json -Depth 99 | Set-Content path\to\mynewjson.json

array subexpression operator @(...)确保Modules属性将成为array.

使用有问题的示例得到的Json将变成:

{
  "Content": {
    "Modules": [
      {
        "ID": 3,
        "Name": "Test HD Module 2",
        "Team": "Server",
        "Description": "This module opens the website.",
        "Is_Admin": "No",
        "Location": "Server",
        "Client_Facing": "No",
        "Action": "Website",
        "Image_Name": "device-info",
        "Image_Path": "C:Temp/Userss",
        "Is_Popup": true,
        "Popup_Text": "Are you sure you want to run Test HD Module 3?",
        "Submodule": "false",
        "Is_Editable": "false"
      }
    ],
    "Sub-Modules": [
      {
        "ID": 4,
        "Name": "Test HD Sub-Module 3",
        "Team": "Help Desk",
        "Is_Admin": "No",
        "Location": "Server",
        "Client_Facing": "No",
        "Action": "CMD",
        "Action_Text": "",
        "Image_Name": "device-info",
        "Image_Path": "C:Temp/Users",
        "Is_Popup": "false",
        "Popup_Text": "",
        "Submodule": "true",
        "Is_Editable": "false"
      }
    ]
  }
}

Json相关问答推荐

我如何知道TJSONNumber是double还是double?

使用 jq 从带有转义反斜杠字符的嵌套 JSON 中提取数据

Rust实现:高效解析任意大小的JSON数组

JOLT转换并向输出添加新数组

将=分隔值文件转换为:json文件

jq json - 按键名 Select

JQ 中的样本标准偏差

Rails 控制器无需编码即可渲染 json

序列化特定类型时如何使 JSON.Net 序列化程序调用 ToString()?

JSON Schema 与 XML Schema 的比较及其future

如何使用 Newtonsoft.Json 反序列化 JSON 数组

json.decoder.JSONDecodeError:期望值:第 1 行第 1 列(字符 0)

在 bash 中将 CSV 转换为 JSON

使用 Spring 和 JsonTypeInfo 注释将 JSON 反序列化为多态对象模型

如何使用 Jackson 重命名 JSON 序列化中的根键

jQuery fullcalendar 发送自定义参数并使用 JSON 刷新日历

如何向(JSON)对象的原型添加方法?

如何向从文件中检索的 JSON 数据添加键值?

FastAPI:如何将正文读取为任何有效的 json?

在没有 ASP.NET Core 的情况下将 IConfigurationSection 绑定到复杂对象