请教一个Json字符串转DataTabe的问题----Json嵌套了几层,不会分析了,各位来帮忙哈!

TianYi3G2013 2013-11-04 04:02:19
原始数据:




{"startid":"3150","endid":"3136","totalpage":0,"bool":true,"data":[{"valueID":{"id":"3150"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","TP-LINK-89C5BA","EC:88:8F:89:C5:BA","22594495","0","2013-11-4 14:36:56","3150"]},{"valueID":{"id":"3149"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","TP-LINK","5C:63:BF:3F:DD *","93793841","0","2013-11-4 14:28:55","3149"]},{"valueID":{"id":"3148"},"text":["TP-LINK TECHNOLOGIES CO.,LTD.","TP-LINK  A97CDC","BC-D1-77-A9-7C-DC","66497721","0","2013-11-4 13:40:22","3148"]},{"valueID":{"id":"3147"},"text":["BZD",".....","6C:E8\uff1a73\uff1aA7\uff1a80\uff1aB6","16499249","0","2013-11-4 11:48:13","3147"]},{"valueID":{"id":"3146"},"text":["TP-LINK","7F1082","EC:88\uff1a8F:7F:10:80","64004143","0","2013-11-4 11:47:07","3146"]},{"valueID":{"id":"3145"},"text":["TP-LINK TECHNOLOGIES CO.,LTD.","Volontiers","BC:D1:77:20:3B:B0","74196425","0","2013-11-4 11:11:02","3145"]},{"valueID":{"id":"3144"},"text":["TP-LINK TECHNOLOGIES CO.,LTD.","TP-LINK","A8:15:4D:9A:33:22","80959472","0","2013-11-4 11:10:01","3144"]},{"valueID":{"id":"3143"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","FAST_50E602","38:83:45:50:E6:02","76232473","0","2013-11-4 11:08:26","3143"]},{"valueID":{"id":"3142"},"text":["FiberHome Telecommunication Technologies CO.,LTD","chinanet","00:0a:c2:e9:3E:85","10973592","0","2013-11-3 20:23:56","3142"]},{"valueID":{"id":"3141"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","ck","40:16:9f:45:95:b6","24025874","0","2013-11-3 18:51:57","3141"]},{"valueID":{"id":"3140"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","TP-LINK_7FF4B6","5C:63:BF:7F:F4:B6","72403853","1","2013-11-3 8:16:17","3140"]},{"valueID":{"id":"3139"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","TP-LINK_8A1A8C","14:E6:E4:8A:1A:8C","63078589","0","2013-11-2 21:33:42","3139"]},{"valueID":{"id":"3138"},"text":["CHINIA","Chinanet","72:87:30:D0:17:3C","36374366","0","2013-11-2 20:31:39","3138"]},{"valueID":{"id":"3137"},"text":["Tenda Technology Co., Ltd.","Tenda_024CF8","C8:3A:35:02:4C:F8","28004905","0","2013-11-2 18:48:24","3137"]},{"valueID":{"id":"3136"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","J*****","8C:21:0A:A6:BE *","21948299","1","2013-11-1 18:09:17","3136"]}]}


可以直接解析字符串,也可以用Json.Net,能达到目的就可以了。
参考文章:

Asp.net中Json格式转换为DataTable - anguslzh的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/anguslzh/article/details/8291897

---------------------------------------------------------------
示例代码:
public DataTable getDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("channelid", typeof(System.Int32));
dt.Columns.Add("name", typeof(System.String));
dt.Columns.Add("filesize", typeof(System.Int32));
dt.Columns.Add("duration", typeof(System.Int32));
dt.Columns.Add("bitrate", typeof(System.Int32));
dt.Columns.Add("video_stream_type1", typeof(System.Int32));
dt.Columns.Add("audio_stream_type1", typeof(System.Int32));
dt.Columns.Add("active", typeof(System.Int32));
return dt;
}
/// <summary>
/// json转换为DataTable
/// </summary>
/// <param name="json">需要转化的json格式字符串</param>
/// <returns></returns>
public DataTable updateInfo(string json)
{
System.Web.Script.Serialization.JavaScriptSerializer jss =
new System.Web.Script.Serialization.JavaScriptSerializer();
object[] obj = (object[])jss.DeserializeObject(json);
Dictionary<string, object> dic;
DataRow dr;
DataTable dt = getDataTable();
foreach (object _obj in obj)
{
dr = dt.NewRow();
dt.Rows.Add(dr);
dic = (Dictionary<string, object>)_obj;
dr["channelid"] = dic["channelid"];
dr["name"] = dic["name"];
dr["filesize"] = dic["filesize"];
dr["duration"] = dic["duration"];
dr["bitrate"] = dic["bitrate"];
dr["video_stream_type1"] = dic["video_stream_type1"];
dr["audio_stream_type1"] = dic["audio_stream_type1"];
dr["active"] = dic["active"];
}
return dt;
}
...全文
270 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaoshiyao 2013-11-04
  • 打赏
  • 举报
回复
dt就是最终的DataTable你要现实 你可以自己绑定
jiaoshiyao 2013-11-04
  • 打赏
  • 举报
回复
最终代码

class Base
    {
        public int startid { get; set; }
        public int endid { get; set; }
        public int totalpage { get; set; }
        public bool Bool { get; set; }
        public List<Child> data { get; set; }

        
    }
    class Child
    {
        public ValueId valueID { get; set; }
        public List<string> text { get; set; }
    }
    class ValueId
    {
        public int Id { get; set; }
    }




 public static DataTable getDataTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("序号", typeof(string));
            dt.Columns.Add("路由", typeof(string));
            dt.Columns.Add("SSID", typeof(string));
            dt.Columns.Add("MAC", typeof(string));
            dt.Columns.Add("PIN", typeof(string));
            dt.Columns.Add("使用率", typeof(string));
            dt.Columns.Add("增加时间", typeof(string));
            return dt;
        }


var json = File.ReadAllText("json.txt");
            JavaScriptSerializer jss = new JavaScriptSerializer();
            var res = jss.Deserialize<Base>(json);
            DataTable dt = getDataTable();
            foreach (var item in res.data)
            {
                var newRow = dt.NewRow();
                for (int i = 0; i < item.text.Count; i++)
                {
                    newRow[i] = item.text[i];
                }
                dt.Rows.Add(newRow);
            }
            //这个DataTable就是了dt
TianYi3G2013 2013-11-04
  • 打赏
  • 举报
回复
引用 9 楼 jiaoshiyao 的回复:
你只要text这一个列?
还是。。。


最终是这个样子:

就可以了。
jiaoshiyao 2013-11-04
  • 打赏
  • 举报
回复
引用 10 楼 lyj224170707 的回复:
如果 {"valueID":{"id":"3150"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","TP-LINK-89C5BA","EC:88:8F:89:C5:BA","22594495","0","2013-11-4 14:36:56","3150"]} 已经满足你DATATABLE里每列的属性的话,就别纠结那么多了,就干脆对字符串直接用正则把他们全部截取出来。。
我怎么没想到呢。。
游离失所 2013-11-04
  • 打赏
  • 举报
回复
如果 {"valueID":{"id":"3150"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","TP-LINK-89C5BA","EC:88:8F:89:C5:BA","22594495","0","2013-11-4 14:36:56","3150"]} 已经满足你DATATABLE里每列的属性的话,就别纠结那么多了,就干脆对字符串直接用正则把他们全部截取出来。。
jiaoshiyao 2013-11-04
  • 打赏
  • 举报
回复
你只要text这一个列? 还是。。。
TianYi3G2013 2013-11-04
  • 打赏
  • 举报
回复
引用 7 楼 jiaoshiyao 的回复:
你看看这样能不能实现你的方法 更正base类里面的属性 public List<Child> data { get; set; } base类里面的这个属性是一个集合 他是一对多的 貌似转不成DataTable
嗯嗯,先谢谢了,现在我发现,这个JSON主要 的信息在节点text中, 所以要实现我上面那图片所说的DataTable,只要text里面的数据就可以了。 即:把text里面的元素作为DataTable的行元素就可以 了。
jiaoshiyao 2013-11-04
  • 打赏
  • 举报
回复
你看看这样能不能实现你的方法 更正base类里面的属性 public List<Child> data { get; set; } base类里面的这个属性是一个集合 他是一对多的 貌似转不成DataTable
jiaoshiyao 2013-11-04
  • 打赏
  • 举报
回复
我实现了转换成实体类的方法 你的DataTable方法 貌似不行 因为有一个属性是一对多的
class Base
    {
        public int startid { get; set; }
        public int endid { get; set; }
        public int totalpage { get; set; }
        public bool Bool { get; set; }
        public List<object> data { get; set; }

        
    }
    class Child
    {
        public ValueId valueID { get; set; }
        public List<string> text { get; set; }
    }
    class ValueId
    {
        public int Id { get; set; }
    }

var json = File.ReadAllText("json.txt");
            JavaScriptSerializer jss = new JavaScriptSerializer();
            var res = jss.Deserialize<Base>(json);
TianYi3G2013 2013-11-04
  • 打赏
  • 举报
回复
引用 4 楼 jiaoshiyao 的回复:
我犯二了Sorry
呃呃。。。看明白了,那麻烦你努力想一想,怎样实现咯。
jiaoshiyao 2013-11-04
  • 打赏
  • 举报
回复
我犯二了Sorry
jiaoshiyao 2013-11-04
  • 打赏
  • 举报
回复
你没有发json代码啊 你发的都是你转换过的 json字符串的源码呢
TianYi3G2013 2013-11-04
  • 打赏
  • 举报
回复
引用 1 楼 jiaoshiyao 的回复:
瞄了几眼 你再问什么?
想把上面的Json代码转为图片中的DataTable形式。
jiaoshiyao 2013-11-04
  • 打赏
  • 举报
回复
瞄了几眼 你再问什么?

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧