You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:40:27