Explain the method of extracting multi layer nested json data by ASP. NET in detail

  • 2021-09-11 19:58:25
  • OfStack

In this paper, the method of extracting multi-layer nested json data by ASP. NET using the third-party class library Newtonsoft. Json is described as follows.

Suppose the json string to be extracted is as follows:


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

Refer to the namespace first:


using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

You can think of the above json string as an object, as long as you write the corresponding class. (If you use VS2013 for development, you can quickly convert the json string into an entity class by "Edit-Paste Selectively-Paste JSON as a Class".)


 public class UserInfo
 {
  public string name;
  public int age;
  public address addr;
 }
 public class address
 {
  public string city;
  public string province;
 }

1. The code for converting an json string to an entity object is as follows:


string jsonData="{\"name\":\"lily\",\"age\":23,\"addr\":{\"city\":guangzhou,\"province\":guangdong}}";
UserInfo user=(UserInfo)JsonConvert.DeserializeObject(jsonData, typeof(UserInfo));

2. To read the value of an attribute in json, you can use the following code:


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. Explain the multi-layer nested json to get the value of any attribute:

If the json string to be processed is as follows:


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

Then let you enter an object, such as "city", and the system will output "guangzhou". If you enter "age", it will output "23". Because json is nested at multiple levels, it needs to be traversed one by one. The code is as follows:


  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;
  }

Code to call GetJsonValue:


string jsonData = "{\"name\":\"lily\",\"age\":23,\"addr\":{\"city\":\"guangzhou\",\"province\":\"guangdong\"}}";
JObject jsonObj = JObject.Parse(jsonData);
Response.Write(GetJsonValue(jsonObj.Children(), "province"));

If it is a multi-layer nested array, you can also use the following code:


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"]);

4. JSON to XML:


string xmlstr=((XmlDocument)JsonConvert.DeserializeXmlNode(jsonData)).InnerXml.ToString();


Related articles: