Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse json string using JSON.NET

I have a string like the following in C#. I need to loop through and create an HTML table output. I tried with JSON.NET but couldn't figure out how to retrieve the keys (Name, Age & Job).

string data = "{items:[ {'Name':'AAA','Age':'22','Job':'PPP'} ,{'Name':'BBB','Age':'25','Job':'QQQ'} ,{'Name':'CCC','Age':'38','Job':'RRR'}]}"; 

The table format is

 .........................   | Name  | Age   | Job   |   .........................   | AAA   | 22    | PPP   |   .........................   | BBBB  | 25    | QQQ   |   .........................   | CCC   | 28    | RRR   |   .........................    

Any help will be greatly appreciated.


The code provided by Dave is the ideal solution here.. but it work for .NET 4.0.. I have used following code with JSON.NET for .NET 3.5

using Newtonsoft.Json.Linq;

string jsonString = "{items:[{'Name':'Anz','Age':'29','Job':''},{'Name':'Sanjai','Age':'28','Job':'Developer'},{'Name':'Rajeev','Age':'31','Job':'Designer'}]}";          JObject root = JObject.Parse(jsonString);          JArray items = (JArray)root["items"];          JObject item;         JToken jtoken;          for (int i = 0; i < items.Count; i++) //loop through rows         {             item = (JObject)items[i];             jtoken = item.First;              while (jtoken != null)//loop through columns             {                 Response.Write(((JProperty)jtoken).Name.ToString() + " : " + ((JProperty)jtoken).Value.ToString() + "<br />");                  jtoken = jtoken.Next;             }         } 
like image 616
Ansar Muhammad Avatar asked Jun 05 '11 16:06

Ansar Muhammad


People also ask

How do I deserialize a JSON string to an object in C#?

A common way to deserialize JSON is to first create a class with properties and fields that represent one or more of the JSON properties. Then, to deserialize from a string or a file, call the JsonSerializer. Deserialize method.

How can I convert JSON to string?

Use the JavaScript function JSON.stringify() to convert it into a string. const myJSON = JSON.stringify(obj); The result will be a string following the JSON notation.

What is the use of JObject in C#?

The JObject type exposes the following members. Initializes a new instance of the JObject class. Initializes a new instance of the JObject class with the specified content. Initializes a new instance of the JObject class with the specified content.

What is JSON parse in C#?

Introduction to JSON Parser in C# JSON (JavaScript Object Notation) parse is language-independent which is a lightweight data-interchanging format, self-describing, and easy to understand. JSON parser is an alternative to XML it represents objects in structural text format and the data stored in key-value pairs.


1 Answers

You can use .NET 4's dynamic type and built-in JavaScriptSerializer to do that. Something like this, maybe:

string json = "{\"items\":[{\"Name\":\"AAA\",\"Age\":\"22\",\"Job\":\"PPP\"},{\"Name\":\"BBB\",\"Age\":\"25\",\"Job\":\"QQQ\"},{\"Name\":\"CCC\",\"Age\":\"38\",\"Job\":\"RRR\"}]}";  var jss = new JavaScriptSerializer();  dynamic data = jss.Deserialize<dynamic>(json);  StringBuilder sb = new StringBuilder();  sb.Append("<table>\n  <thead>\n    <tr>\n");  // Build the header based on the keys in the //  first data item. foreach (string key in data["items"][0].Keys) {         sb.AppendFormat("      <th>{0}</th>\n", key); }  sb.Append("    </tr>\n  </thead>\n  <tbody>\n");  foreach (Dictionary<string, object> item in data["items"]) {     sb.Append("    <tr>\n");      foreach (string val in item.Values) {         sb.AppendFormat("      <td>{0}</td>\n", val);     } }  sb.Append("    </tr>\n  </tbody>\n</table>");  string myTable = sb.ToString(); 

At the end, myTable will hold a string that looks like this:

<table>     <thead>         <tr>             <th>Name</th>             <th>Age</th>             <th>Job</th>         </tr>     </thead>     <tbody>         <tr>             <td>AAA</td>             <td>22</td>             <td>PPP</td>         <tr>             <td>BBB</td>             <td>25</td>             <td>QQQ</td>         <tr>             <td>CCC</td>             <td>38</td>             <td>RRR</td>         </tr>     </tbody> </table> 
like image 154
Dave Ward Avatar answered Sep 30 '22 11:09

Dave Ward