首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用JArrayItem.Remove(“值”)删除不工作的对象

使用JArrayItem.Remove(“值”)删除不工作的对象
EN

Stack Overflow用户
提问于 2022-11-09 05:53:22
回答 2查看 39关注 0票数 1

我试图从现有的JArray中删除一个对象,但是当我运行从JArray中删除该属性的方法时,该属性仍然存在。

我尝试简单地使用下面的代码

代码语言:javascript
运行
复制
JObject rss1 = JObject.Parse(File.ReadAllText("online.json"));
JObject uList = (JObject)rss1["uList"];
JArray newOnline = (JArray)uList["online"];
newOnline.Remove("value");

上面的代码几乎是直接从修改Json的Newtonsoft.Json文档中复制和粘贴的,但只更改为删除新项而不是添加它。我试过其他帖子的解决方案,但都没有用。添加字段可以像预期的那样工作,但是尝试删除它根本不起作用。

下面是JSON文件的内容

代码语言:javascript
运行
复制
{
  "uList": {
    "placeHolder": "placeHolderValue",
    "online": [
      "value"
    ]
  }
}

下面是正在运行的代码的预期JSON输出

代码语言:javascript
运行
复制
{
  "uList": {
    "placeHolder": "placeHolderValue",
    "online": [
    ]
  }
}

下面是正在运行的代码的实际输出。

代码语言:javascript
运行
复制
{
  "uList": {
    "placeHolder": "placeHolderValue",
    "online": [
      "value"
    ]
  }
}

我是不是做错了什么却没意识到?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-09 07:03:51

还可以通过查询JToken JArray中的value字符串来删除online

将字符串解析为JObject:

代码语言:javascript
运行
复制
JObject rss1 = JObject.Parse(File.ReadAllText("online.json"));

现在使用下面的查询删除特定的令牌。

代码语言:javascript
运行
复制
rss1.SelectTokens("$.uList.online[?(@ == 'value')]").FirstOrDefault()?.Remove();

试着上网

票数 0
EN

Stack Overflow用户

发布于 2022-11-09 06:18:16

问题是,数组中实际上没有一个string,而是一个JValueJArray.Remove方法接受JToken,但是隐式将字符串大写为JValue生成的JToken不等于要删除的字符串。

这里有两种解决方案:

  1. 查找数组中的项,然后将其传递给remove方法:
代码语言:javascript
运行
复制
JToken item = newOnline.FirstOrDefault(arr => arr.Type == JTokenType.String && arr.Value<string>() == "value");
newOnline.Remove(item);
  1. 使用数组项的.Remove方法将其从数组中删除:
代码语言:javascript
运行
复制
JToken item = newOnline.FirstOrDefault(arr => arr.Type == JTokenType.String && arr.Value<string>() == "value");
item?.Remove();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74370457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档