我是靠谱客的博主 幽默小海豚,最近开发中收集的这篇文章主要介绍从jarray中删除指定元素的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

string jsonText = "[{"a": "aaa","b": "bbb","c": "ccc"},{"a": "aa","b": "bb","c": "cc"}]";
var mJObj = JArray.Parse(jsonText);
//需求,删除列表里的a节点的值为"aa"的项
IList<JToken> _ILIST = new List<JToken>(); //存储需要删除的项
JArray _JARRAY = new JArray();
foreach (var ss in mJObj)
//查找某个字段与值

{
if ((((JObject)ss)["a"]).ToString() == "aa")
{
_ILIST.Add(ss);
_JARRAY.Add(ss);
Console.Write(_ILIST[0]);
Console.Write(_ILIST[0].GetHashCode());
Console.Write("rn---------------------------rn");
Console.Write("rn---------------------------rn");
Console.Write(_JARRAY[0]);
Console.Write(_JARRAY[0].GetHashCode());
Console.Write("rn---------------------------rn");
Console.Write("rn---------------------------rn");
Console.Write(mJObj[1].GetHashCode());
}
}
foreach (var item in _ILIST)
//移除mJObj
有效

{
mJObj.Remove(item);
}
foreach (var item in _JARRAY)
//移除mJObj
无效

{
mJObj.Remove(item);
}
View Code

通过_ILIST删除是有效的。

通过_JARRAY删除是无效的。

 

感谢怪蜀黍(Q:390647417)的解惑~

因为mJObj是一个JArray,实现了 IList<JToken>, 所以这里的ss就是JToken类型,把它add到_ILIST这样一个List<JToken>里,非常适合。
但是你如果调用 _JARRAY.Add(ss), 把JToken加到JArray里,就会把这个JToken从原来它所属的JObject上“拆”下来,所以ss的Root在Add之后变了。
 
所以,本质上,这个是一个json的数据格式的设计问题。我觉得这样很合理。
 
 

 总结:不同对象的Add方法并不保证原来是啥样,加进去还是啥样。

加进去的对象。在类型,值,ToString(),GetHash值,Root等方面,可能或多或少存在不同的地方。

所以以后遇到这种“诡异”的情况的时候,第一时间要想到是Add出了问题

转载于:https://www.cnblogs.com/jasonlam/p/7011394.html

最后

以上就是幽默小海豚为你收集整理的从jarray中删除指定元素的问题的全部内容,希望文章能够帮你解决从jarray中删除指定元素的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部