当前位置: 首页 > 编程语言 > C#

JSON计数仅返回1而不是2分享

时间:2023-04-11 03:38:04 C#

C#学习教程:JSON计数只返回1而不是2;令牌[“行”]是:{“组件”:[{“标签”:“CUT”,“missingValue”:“”,“格式”:“Cont”,“varName”:“GPA”,“标签”:"平均成绩","element":[{"startValue":"1","endValue":"249","label":"低于2.50"},{"startValue":"250","endValue":"299","label":"2.50-2.99"},{"startValue":"300","endValue":"349","label":"3.00-3.49"},{"startValue":"350","endValue":"400","label":"3.50orhigher"}]},{"tag":"CAT","missingValue":"","format":"Disc","varName":"STEMMAJ","label":"以STEM领域为重点的主要研究领域","element":[{"value":"1","label":"数学/计算机/科学/工程/Technologies"},{"value":"2","label":"社会/行为科学"},{"value":"4","label":"非STEM领域"},{"value":"5","label":"未定学位课程"}]}]}我想计算组件的数量。这也不能起作用:token["rows"]["component"].Count();整个JSON在这里:{"version":"1.0","createdBy":"PowerStatsv1.0","test":"ohoh","DSNumber":{"value":"82"},"title":{“值”:“”},“脚注”:{“值”:“”},“flagRSE”:{“值”:“30,50”,“符号”:“!,!!”},“权重”:{“类型”:“0”,“varName”:“WTA000”,“标签”:“weight_var”},“过滤器”:{“filter_1”:{“组件”:{“varName”:"JOBEARN2","filterType":"Range","format":"Cont","label":"职位:在校期间的工作收入(含勤工俭学)","element":{"startValue":"1","endValue":"","label":"X>=1"}}},"filter_2":{"component":{"varName":"JOBROLE2","filterType":"Dist","format":"Disc","label":"Job:Primaryroleasstudentoremployee(includingwork-study)","element":{"value":"1","label":"学生工作以支付费用"}}}},"columns":{"component":{"tag":"CAT","missingValue":"4,5,6,7,8,9,10,13,14,15,16,17,18,19,20,21,22,23,-3","表格at":"Disc","varName":"MAJORS23","label":"专业:本科(23类)","element":[{"value":"0","label":"未定"},{"value":"1","label":"计算机与信息科学"},{"value":"2","label":"工程与工程技术"},{"value":"3","label":"生物和物理科学,科学技术"},{"value":"11","label":"个人和消费者服务"},{"value":"12",“标签”:“制造、建筑、维修和运输”}]}},“行”:{“组件”:[{“标签”:“CUT”,“缺失值”:“”,“格式”:“续","varName":"GPA","label":"平均绩点","element":[{"startValue":"1","endValue":"249","label":"低于2.50"},{"startValue":"250","endValue":"299","label":"2.50-2.99"},{"startValue":"300","endValue":"349","label":"3.00-3.49"},{"startValue":"350","endValue":"400","label":"3.50或更高"}]},{"tag":"CAT","missingValue":"","format":"Disc","varName":"STEMMAJ","label":"主要研究领域,侧重于STEM领域","element":[{"value":"1","label":"Math/Computer/Sciences/Engineering/Technologies"},{"value":"2","label":"社会/行为科学"},{"value":"4","label":"Non-STEMfield"},{"value":"5","label":"未决定或不在学位课程中"}]}]}}根据您在另一个答案中的评论,我可以现在看看你为什么感到困惑你没有提到你在你的问题中进行XML到JSON的转换。我相信你知道,XML没有像JSON那样的“对象”或“数组”的概念。在XML中,一切都只是命名节点的集合。在决定某个东西应该是数组还是对象时,JSON.net会查看同一级别是否有多个同名节点。如果有,则显然是一个数组。但是,如果一个A节点只有一个孩子,那么它是不明确的。它可以是一个项目数组,也可以只是一个简单的对象属性。默认情况下,Json.Net选择后者。如果XML中的结果数在零到之间,这会使转换为JSON时更难处理。为了便于说明,请考虑以下XML。在其中,我们有三个不同的“集合”,每个都有不同数量的“项目”。一个系列只有一个孩子;第二个有两个,最后一个是空的。A1B2C3当使用JsonConvert.SerializeXmlNode()转换时,我们得到这个JSON:{"collection1":{"item":{"label":"A","value":"1"}},"collection2":{"item":[{"label":"B","value":"2"},{"label":"C","value":"3"}]},"collection3":null}请注意,在第一个集合中,项目已成为父集合对象的属性,而在第二种情况下,项目将放置在一个数组中,并且该数组已成为父对象值上的项目属性的属性。(换句话说,实际的项目在JSON结构中低一级!)最后一个集合根本没有项目属性;它的值为空。那我们怎么处理呢?我们真正需要的是一个辅助方法,它将处理所有这些不同的情况并返回我们可以一致使用的项目集合(例如JArray)。这是一个应该工作的扩展方法:if(token!=null){if(token.Type==JTokenType.Array){return(JArray)token;}else{returnnewJArray(token);}}}返回新的JArray();}}这是一个演示,展示了如何使用此辅助方法打印出项目列表:":{""label"":""A"",""value"":""1""}},""collection2"":{""item"":[{""label"":""B"",""value"":""2""},{""label"":""C"",""value"":""3""}]},""collection3““:无效的}”;JObjectroot=JObject.Parse(json);DumpItems(根,“collection1”);DumpItems(根,“collection2”);DumpItems(根,“collection3”);}privatestaticvoidDumpItems(JTokentoken,stringcollectionName){JArrayarray=token[collectionName].ToJArray("item");Console.WriteLine("项目数sin"+collectionName+":"+array.Count);foreach(JTokeniteminarray){Console.WriteLine(item["label"]+":"+item["value"]);}}}输出:Countofitemsincollection1:1A:1Countofitemsincollection2:2B:2C:Countofitemsincollection3:0回到原来的问题,你现在应该可以这样做了:varcount=token["rows"].ToJArray("component").Count;并获取您期望的值,以下代码:introwsCount=token["rows"]["component"].Count();将为您提供正确的回答。我测试了这段代码:vartoken=JObject.Parse(...yourpastedJSON...);introwsCount=token["rows"]["component"].Count();你应该粘贴http://jsonlint.com/获取有用的缩进信息。问题是因为......它只是一个。“行”json是“行”:{这意味着......这是一个可怕的名字。这里的行是一个对象(见{)。。不是数组,只有一个。你要的大概是一个内联组件。可能json生成错了,但是一个是正确答案。以上就是C#学习教程:JSON计数只返回1而不是2分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: