使用JArray.Remove("value")无法移除JSON数组元素问题
问题分析与解决
你的代码存在两个关键问题导致移除元素无效:
1. Remove方法参数类型错误
JArray的Remove(string)方法是用来移除键名为该字符串的子JToken,而你的数组里是直接的字符串值"value",并非带键的JToken结构,所以这个调用找不到目标元素,移除操作自然不生效。
2. 未将修改后的内容写回文件
你仅在内存中修改了JObject对象,但没有把修改后的JSON内容重新写入原文件,所以文件内容看起来和初始状态一致。
正确解决方案
方法一:找到对应JToken再移除
适用于不知道元素索引,仅知道值的情况:
JObject rss1 = JObject.Parse(File.ReadAllText("online.json")); JObject uList = (JObject)rss1["uList"]; JArray newOnline = (JArray)uList["online"]; // 定位到值为"value"的JToken JToken targetItem = newOnline.FirstOrDefault(t => t.ToString() == "value"); if (targetItem != null) { newOnline.Remove(targetItem); } // 将修改后的内容写回文件 File.WriteAllText("online.json", rss1.ToString());
方法二:通过索引移除(已知元素位置时)
如果确定要移除的元素在数组的固定位置(比如第一个),可以直接用索引操作:
JObject rss1 = JObject.Parse(File.ReadAllText("online.json")); JObject uList = (JObject)rss1["uList"]; JArray newOnline = (JArray)uList["online"]; if (newOnline.Count > 0) { newOnline.RemoveAt(0); } File.WriteAllText("online.json", rss1.ToString());
方法三:用LINQ过滤生成新数组
通过过滤掉目标值,重新赋值给数组字段:
JObject rss1 = JObject.Parse(File.ReadAllText("online.json")); JObject uList = (JObject)rss1["uList"]; JArray newOnline = (JArray)uList["online"]; // 过滤掉值为"value"的元素,生成新数组 uList["online"] = new JArray(newOnline.Where(t => t.ToString() != "value")); File.WriteAllText("online.json", rss1.ToString());
内容的提问来源于stack exchange,提问作者AyeItsAxi
相关产品推荐
相关产品推荐

