如何在PowerShell中移除JSON对象中属性的特定值条目
移除JSON数组中指定值的条目
你已经掌握用Remove()方法删除JSON对象的特定属性,但现在需要移除JSON数组中Name为"test"的条目。
原始JSON:
{ "name": "new-report", "resources": { "repositories": [ { "Name": "test" }, { "Name": "CentralLogger-Nuget-Local" } ] } }
目标JSON:
{ "name": "new-report", "resources": { "repositories": [ { "Name": "CentralLogger-Nuget-Local" } ] } }
下面提供两种常用的实现方式:
方法一:使用Newtonsoft.Json(Json.NET)
这是.NET生态中广泛使用的第三方JSON库,需要先通过NuGet安装Newtonsoft.Json包。
using Newtonsoft.Json.Linq; // 原始JSON字符串 string originalJson = @" { ""name"": ""new-report"", ""resources"": { ""repositories"": [ { ""Name"": ""test"" }, { ""Name"": ""CentralLogger-Nuget-Local"" } ] } }"; // 解析JSON为JObject JObject jsonObj = JObject.Parse(originalJson); // 获取repositories数组 JArray repos = (JArray)jsonObj["resources"]["repositories"]; // 筛选保留Name不等于"test"的条目,替换原数组 repos.ReplaceAll(repos.Where(item => (string)item["Name"] != "test")); // 输出处理后的JSON string resultJson = jsonObj.ToString();
方法二:使用System.Text.Json(.NET内置)
如果使用.NET Core 3.0+或.NET 5+,可以直接用内置的System.Text.Json库,无需额外安装包。
using System.Text.Json; using System.Text.Json.Nodes; // 原始JSON字符串 string originalJson = @" { ""name"": ""new-report"", ""resources"": { ""repositories"": [ { ""Name"": ""test"" }, { ""Name"": ""CentralLogger-Nuget-Local"" } ] } }"; // 解析JSON为JsonObject JsonObject jsonObj = JsonNode.Parse(originalJson).AsObject(); // 获取repositories数组 JsonArray repos = jsonObj["resources"].AsObject()["repositories"].AsArray(); // 筛选出符合条件的条目,重新构建数组 var filteredItems = repos.Where(item => item.AsObject()["Name"].GetValue<string>() != "test").ToList(); repos.Clear(); foreach (var item in filteredItems) { repos.Add(item); } // 输出格式化后的目标JSON string resultJson = jsonObj.ToJsonString(new JsonSerializerOptions { WriteIndented = true });
内容的提问来源于stack exchange,提问作者wehelpdox
相关产品推荐
相关产品推荐

