提取多層嵌套Json數據

  1. 在.net 2.0中提取這樣的json  
  2. {"name":"lily","age":23,"addr":{"city":guangzhou,"province":guangdong}}  
  3. 引用命名空間  
  4. using Newtonsoft.Json;  
  5. using Newtonsoft.Json.Linq;  
  6. 可以把上面的JSON看成一個對象.你只要寫對應的類即可  
  7. public class UserInfo  
  8. {  
  9. public string name;  
  10. public int age;  
  11. public address addr;  
  12. }  
  13. public class address  
  14. {  
  15. public string city;  
  16. public string province;  
  17. }  
  18. 然後在解析的地方這樣寫:  
  19. string jsonData="{\"name\":\"lily\",\"age\":23,\"addr\":{\"city\":guangzhou,\"province\":guangdong}}";  
  20. UserInfo user=(UserInfo)JsonConvert.DeserializeObject(jsonData, typeof(UserInfo));  
  21. 得到City的值只要:user.addr.City;  
  22. 這樣實現也行  
  23. JObject jsonObj = JObject.Parse(jsonData);  
  24. string name=jsonObj ["name"].ToString();  
  25. string age=jsonObj ["age"].ToString();  
  26. string city=((JObject )jsonObj ["addr"])["city"].ToString();  
  27. string province=((JObject )jsonObj ["addr"])["province"].ToString();  
  28. 如何這個json是動態的呢?譬如讓你輸入一個json,如{"name":"lily","age":23,"addr":{"city":guangzhou,"province":guangdong}}; 然後讓你輸入一個對象,如city,然後系統會輸出guangzhou這個值,那這樣的話,json就是動態生成的了,我想了解有沒有讀取這樣的json的方法。(注意,json是多級嵌套的。)  
  29. 就用遍歷  
  30. public string GetJsonValue(JEnumerable<JToken> jToken,string key)  
  31. {  
  32. IEnumerator enumerator = jToken.GetEnumerator();  
  33. while (enumerator.MoveNext())  
  34. {  
  35. JToken jc = (JToken)enumerator.Current;  
  36.   
  37. if (jc is JObject||((JProperty)jc).Value is JObject)  
  38. {  
  39. return GetJsonValue(jc.Children(), key);  
  40. }  
  41. else  
  42. {  
  43. if (((JProperty)jc).Name == key)  
  44. {  
  45. return ((JProperty)jc).Value.ToString();  
  46. }  
  47. }  
  48. }  
  49. return null;  
  50. }  
  51. 在調用的時候:  
  52. string jsonData = "{\"name\":\"lily\",\"age\":23,\"addr\":{\"city\":\"guangzhou\",\"province\":\"guangdong\"}}";  
  53. JObject jsonObj = JObject.Parse(jsonData);  
  54. Response.Write(GetJsonValue(jsonObj.Children(), "province"));  
  55. 如果有多層嵌套的數組  
  56. string  jsonData = "{\"addr\":[{\"city\":\"guangzhou\",\"province\":\"guangdong\"},{\"city\":\"guiyang\",\"province\":\"guizhou\"}]}";  
  57. JObject  jsonObj = JObject.Parse(jsonData);  
  58. JArray  jar = JArray.Parse(jsonObj["addr"].ToString());  
  59. JObject  j = JObject.Parse(jar[0].ToString());  
  60. Response.Write(j["city"]);  
  61. JSON轉XML  
  62. string xmlstr=((XmlDocument)JsonConvert.DeserializeXmlNode(jsonData)).InnerXml.ToString();  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章