解析使用JSON.NET JSON字符串 [英] Parse json string using JSON.NET

查看:248
本文介绍了解析使用JSON.NET JSON字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个在C#下面的字符串。我需要遍历并创建一个HTML表输出。我试着用JSON.NET但无法弄清楚如何检索键(姓名,年龄和放大器;作业)。

 字符串数据={项目:
{'名':'AAA','年龄':'22','工作':'PPP'}
{'名':'BBB','年龄':'25','工作':'QQQ'}
{'名':'CCC','年龄':'38','工作':'RRR'}]};

表格式为:


.........................
|名称|年龄|人才招聘|
.........................
| AAA | 22 | PPP |
.........................
| BBBB | 25 | QQQ |
.........................
| CCC | 28 |存款准备金率|
.........................

任何帮助将大大AP preciated。


戴夫提供的code是理想的解决方案在这里..但它.NET 4.0工作..我用下面的code。与JSON.NET为.NET 3.5

使用Newtonsoft.Json.Linq

 字符串jsonString = \"{items:[{'Name':'Anz','Age':'29','Job':''},{'Name':'Sanjai','Age':'28','Job':'Developer'},{'Name':'Rajeev','Age':'31','Job':'Designer'}]}\";        JObject根= JObject.Parse(jsonString);        JArray项目=(JArray)根[项目];        JObject项目;
        JToken jtoken;        的for(int i = 0; I< items.Count;我++)//遍历行
        {
            项目=(JObject)项目[I]
            jtoken = item.First;            而(jtoken!= NULL)//通过循环列
            {
                回复于(((JProperty)jtoken).Name.ToString()+:+((JProperty)jtoken).Value.ToString()+&所述峰; br />中);                jtoken = jtoken.Next;
            }
        }


解决方案

您可以使用.NET 4的动态类型和内置的JavaScriptSerializer做到这一点。事情是这样的,也许:

  JSON字符串= \"{\\\"items\\\":[{\\\"Name\\\":\\\"AAA\\\",\\\"Age\\\":\\\"22\\\",\\\"Job\\\":\\\"PPP\\\"},{\\\"Name\\\":\\\"BBB\\\",\\\"Age\\\":\\\"25\\\",\\\"Job\\\":\\\"QQQ\\\"},{\\\"Name\\\":\\\"CCC\\\",\\\"Age\\\":\\\"38\\\",\\\"Job\\\":\\\"RRR\\\"}]}\";VAR JSS =新的JavaScriptSerializer();动态数据= jss.Deserialize<动态>(JSON);StringBuilder的SB =新的StringBuilder();sb.Append(<表> \\ n<&THEAD GT; \\ n< TR> \\ n);//建立基于密钥的头
//第一个数据项。
的foreach(数据字符串键[项目] [0]。键){
        sb.AppendFormat(<第i {0}< /第i \\ n键);
}sb.Append(< / TR> \\ n< / THEAD> \\ n<&TBODY GT; \\ n);的foreach(词典<字符串对象>在数据项[项目]){
    sb.Append(< TR> \\ n);    的foreach(在item.Values​​串VAL){
        sb.AppendFormat(< TD> {0}< / TD> \\ N,VAL);
    }
}sb.Append(< / TR> \\ n< / TBODY> \\ n< /表>);字符串myTable的= sb.ToString();

最后, myTable的将举行一个字符串,它看起来像这样:

 <表>
    <&THEAD GT;
        &所述; TR>
            <第i个姓名和LT; /第i
            <第i年龄和LT; /第i
            <第i个工作< /第i
        < / TR>
    < / THEAD>
    <&TBODY GT;
        &所述; 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>
< /表>

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

解决方案

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>

这篇关于解析使用JSON.NET JSON字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆