zoukankan      html  css  js  c++  java
  • 详解ASP.NET提取多层嵌套json数据的方法

    本篇文章主要介绍了ASP.NET提取多层嵌套json数据的方法,利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,有兴趣的可以了解一下。

    本文实例讲述了ASP.NET利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,具体例子如下。

    假设需要提取的json字符串如下:

    {"name":"lily","age":23,"addr":{"city":guangzhou,"province":guangdong}}

    先引用命名空间:

    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    可以把上面的json字符串看成一个对象,只要编写对应的类即可(如果使用VS2013进行开发,可以通过“编辑--选择性粘贴--将JSON粘贴为类”快速地将json字符串转换为实体类)
    public class UserInfo
    {
     public string name;
     public int age;
     public address addr;
    }
    public class address
    {
     public string city;
     public string province;
    }
    1、将json字符串转换为实体对象的代码如下:
    string jsonData="{"name":"lily","age":23,"addr":{"city":guangzhou,"province":guangdong}}";
    UserInfo user=(UserInfo)JsonConvert.DeserializeObject(jsonData, typeof(UserInfo));
    2、读取json中某个属性的值可以使用一下代码:
    JObject jsonObj = JObject.Parse(jsonData);
    string name=jsonObj ["name"].ToString();
    string age=jsonObj ["age"].ToString();
    string city=((JObject )jsonObj ["addr"])["city"].ToString();
    string province=((JObject )jsonObj ["addr"])["province"].ToString();
    3、解释多层嵌套json,获取任意属性的值:
    如果需要处理的json字符串如下:
    {"name":"lily","age":23,"addr":{"city":guangzhou,"province":guangdong}};
    然后让你输入一个对象,如“city”,系统就会输出“guangzhou”,输入“age”,就输出“23”。由于json是多级嵌套的,所以需要逐个遍历,代码如下:
    public string GetJsonValue(JEnumerable<JToken> jToken, string key)
    {
     IEnumerator enumerator = jToken.GetEnumerator();
     while (enumerator.MoveNext())
     {
      JToken jc = (JToken)enumerator.Current;
      if (jc is JObject || ((JProperty)jc).Value is JObject)
      {
       return GetJsonValue(jc.Children(), key);
      }
      else
      {
       if (((JProperty)jc).Name == key)
       {
        return ((JProperty)jc).Value.ToString();
       }
      }
     }
     return null;
    }
    调用GetJsonValue的代码:
    string jsonData = "{"name":"lily","age":23,"addr":{"city":"guangzhou","province":"guangdong"}}";
    JObject jsonObj = JObject.Parse(jsonData);
    Response.Write(GetJsonValue(jsonObj.Children(), "province"));
    如果是多层嵌套的数组,也可以使用以下代码:
    string jsonData = "{"addr":[{"city":"guangzhou","province":"guangdong"},{"city":"guiyang","province":"guizhou"}]}";
    JObject jsonObj = JObject.Parse(jsonData);
    JArray jar = JArray.Parse(jsonObj["addr"].ToString());
    JObject j = JObject.Parse(jar[0].ToString());
    Response.Write(j["city"]);
  • 相关阅读:
    一道初中练习题,现在的我几乎差点很有可能搞不好似乎仿佛就没有做出来.
    [转]IBM ThinkPad 全新、原装机验机流程(完全版)
    在一个BBS上看到的.觉得很不错,放过来.
    验证数字的正则表达式集
    基于百度地图SDK + SQLite数据库的安卓管理系统
    C# 将系统时间转换成农历时间
    博客园
    C#正则表达式的简单用法
    单张图片轮换
    2个有焦点时文字消失或变淡效果
  • 原文地址:https://www.cnblogs.com/sjqq/p/6435617.html
Copyright © 2011-2022 走看看