我试图从现有的JArray
中删除一个对象,但是当我运行从JArray
中删除该属性的方法时,该属性仍然存在。
我尝试简单地使用下面的代码
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文件的内容
{
"uList": {
"placeHolder": "placeHolderValue",
"online": [
"value"
]
}
}
下面是正在运行的代码的预期JSON输出
{
"uList": {
"placeHolder": "placeHolderValue",
"online": [
]
}
}
下面是正在运行的代码的实际输出。
{
"uList": {
"placeHolder": "placeHolderValue",
"online": [
"value"
]
}
}
我是不是做错了什么却没意识到?
发布于 2022-11-09 07:03:51
还可以通过查询JToken JArray中的value
字符串来删除online
。
将字符串解析为JObject:
JObject rss1 = JObject.Parse(File.ReadAllText("online.json"));
现在使用下面的查询删除特定的令牌。
rss1.SelectTokens("$.uList.online[?(@ == 'value')]").FirstOrDefault()?.Remove();
发布于 2022-11-09 06:18:16
问题是,数组中实际上没有一个string
,而是一个JValue
。JArray.Remove
方法接受JToken
,但是隐式将字符串大写为JValue
生成的JToken
不等于要删除的字符串。
这里有两种解决方案:
JToken item = newOnline.FirstOrDefault(arr => arr.Type == JTokenType.String && arr.Value<string>() == "value");
newOnline.Remove(item);
.Remove
方法将其从数组中删除:JToken item = newOnline.FirstOrDefault(arr => arr.Type == JTokenType.String && arr.Value<string>() == "value");
item?.Remove();
https://stackoverflow.com/questions/74370457
复制相似问题