如果事先不知道密钥,如何在C#中解析JSON对象?我有一些如下所示的JSON数据:{"910719":{"id":910719,"type":"asdf","ref_id":7568},"910721":{"id":910721,"type":"asdf","ref_id":7568},"910723":{"id":910723,"type":"asdf","ref_id":7568}}如何使用JSON.net解析它?我可以从做开始:JObjectjFoo=JObject.Parse(data);我需要能够遍历此列表中的每个对象。我希望能够做类似的事情:foreach(stringref_idin(string)jFoo["ref_id"]){...}orforeach(JTokentinjFoo.Descendants()){Console.WriteLine((string)t["ref_id"]);}但当然这是行不通的。如果您在编写代码时知道密钥,那么所有示例都是有用的。如果您事先不知道密钥,它将崩溃。这行得通;这可行,但并不优雅。我相信有更好的方法。varo=JObject.Parse(yourJsonString);foreach(JTokenchildino.Children()){foreach(JTokengrandChildinchild){foreach(JTokengrandGrandChildingrandChild){varproperty=grandGrandChildasJProperty;if(property!=null){Console.WriteLine(property.Name+":"+property.Value);}}}}Print:ID:910719Type:ASDFREF_ID:7568ID:910721Type:ASDFREF_ID:7568ID:910723Type:ASDFREF_ID:7568您可以使用一个简单的LINQ查询迭代后代,如下所示:JObjectjFoo=JObject.Parse(json);foreach(JObjectobjinjFoo.Properties().Select(p=>p.Value)){Console.WriteLine("id:"+obj["id"]);Console.WriteLine("ref_id:"+obj["ref_id"]);}同样,如果你只想要ref_id值,你可以这样得到它:foreach(stringrefIdinjFoo.Properties().Select(p=>p.Value["ref_id"])){);我正在使用Json.NET并编写了一个快速方法,您可以在其中使用递归方法打印出所有键和相应的值。varo=JObject.Parse(YourJsonString);获取所有属性(o);//调用我们的递归方法然后你可以使用这个递归方法获取所有属性和它们的值if(property!=null){Console.WriteLine(property.Name+""+property.Value);//打印所有的值}getAllProperties(child);你考虑过使用JavascriptSerializer吗?你可以尝试做这样的事情:JavaScriptSerializerserializer=newJavaScriptSerializer();varfoo=serializer.Deserialize>>(data);foreach(foo中的varitem){Console.Writeln(item.Value["ref_id"]);}http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx康斯坦丁的解决方案有效,但如果您想要一个ID列表,请执行相同的操作而不是控制台。Writeln()使用下面的Listlist=newList();JavaScriptSerializer序列化器=newJavaScriptSerializer();varfoo=serializer.Deserialize>>(data);foreach(foo中的varitem){list.Add(item.Value["ref_id"]);我找到了TrueWill的答案有效,但我想避免使用foreach并尝试使简单的for循环工作以提高速度我的结果当然可以说是最丑陋的。它们在这里,以防它们对任何人有用。(我省略了WriteLine以便能够更轻松地查看内容。)请注意,这不适用于某些JSON,并且不是完全通用的。一些空检查可以做得更好,等等。以上是C#学习教程:如果事先不知道key,如何在C#中解析JSON对象?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注—//NOW,DOINGITALLASAFORLOOP...//a,b,c,d-用于迭代器计数器。//j1,j2,j3,j4-要迭代的JTokens-每个都是前一个的孩子//p,q,r,s-来自j1/2/3/4的属性。JObjecto=JObject.Parse(json);JTokenj1=o.First;对于(inta=0;a0){j1=j1.Next;如果(j1==null)继续;}varp=j1作为JProperty;控制台.WriteLine("FOR0="+a.ToString()+"---"+p.Name);//在这里做东西。//第一个内循环//设置一个JToken或继续JTokenj2=j1。Children().First()作为JToken;if(j1.Children().Count()>0){j2=j1.Children().First()作为JToken;}else{继续;}Console.WriteLine("***STARTINGFIRSTINNER...");对于(intb=0;b0){j2=j2.下一个;如果(j2==null){控制台。WriteLine("***j2null2..");继续;}}varq=j2作为JProperty;//这些null检查需要是!=或==,这取决于你需要什么德。if(q!=null){Console.WriteLine("FOR1="+a.ToString()+","+b.ToString()+"---"+q.Name);//在这里做东西。//...}//q!nullcheck//SECONDINNERLOOP//设置JToken或继续JTokenj3;如果(j2.Children().Count()>0){j3=j2.Children().First()作为JToken;}else{继续;}Console.WriteLine("******开始第二个内部...");对于(intc=0;c0){j3=j3.Next;如果(j3==null)继续;}varr=j3作为JProperty;如果(r==null){继续;}//r空检查Console.WriteLine("FOR2="+a.ToString()+","+b.ToString()+","+c.ToString()+"---"+r.姓名);//在这里做东西。//第三个内循环//设置一个JToken或继续JTokenj4;if(j3.Children().Count()>0){j4=j3.Children().First()作为JToken;}else{继续;}Console.WriteLine("*********开始第三个内部...");对于(intd=0;d0){j4=j4.Next;如果(j4==null)继续;}vars=j4作为JProperty;如果(s==null){继续;}//空值l检查Console.WriteLine("FOR3="+a.ToString()+","+b.ToString()+","+c.ToString()+","+d.ToString()+"---"+s.姓名);//在这里做东西。//...}//ford-j3}//forc-j2}//forb-j1}//fora-原始JObject收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
