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; } }
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.
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.
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.
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.
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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With