zoukankan      html  css  js  c++  java
  • Json转DataTable

    Json转DataTable

    简单

    /// <summary>
            /// 将json转换为DataTable
            /// </summary>
            /// <param name="strJson">得到的json</param>
            /// <returns></returns>
            public static DataTable JsonToDT(string strJson)
            {
                //转换json格式
                strJson = strJson.Replace(","", "*"").Replace("":", ""#").ToString();
                //取出表名   
                var rg = new Regex(@"(?<={)[^:]+(?=:[)", RegexOptions.IgnoreCase);
                string strName = rg.Match(strJson).Value;
                DataTable tb = null;
                //去除表名   
                strJson = strJson.Substring(strJson.IndexOf("[") + 1);
                strJson = strJson.Substring(0, strJson.IndexOf("]"));
    
                //获取数据   
                rg = new Regex(@"(?<={)[^}]+(?=})");
                MatchCollection mc = rg.Matches(strJson);
                for (int i = 0; i < mc.Count; i++)
                {
                    string strRow = mc[i].Value;
                    string[] strRows = strRow.Split('*');
    
                    //创建表   
                    if (tb == null)
                    {
                        tb = new DataTable();
                        tb.TableName = strName;
                        foreach (string str in strRows)
                        {
                            var dc = new DataColumn();
                            string[] strCell = str.Split('#');
    
                            if (strCell[0].Substring(0, 1) == """)
                            {
                                int a = strCell[0].Length;
                                dc.ColumnName = strCell[0].Substring(1, a - 2);
                            }
                            else
                            {
                                dc.ColumnName = strCell[0];
                            }
                            tb.Columns.Add(dc);
                        }
                        tb.AcceptChanges();
                    }
    
                    //增加内容   
                    DataRow dr = tb.NewRow();
                    for (int r = 0; r < strRows.Length; r++)
                    {
                        dr[r] = strRows[r].Split('#')[1].Trim().Replace("", ",").Replace("", ":").Replace(""", "");
                    }
                    tb.Rows.Add(dr);
                    tb.AcceptChanges();
                }
    
                return tb;
            }
    Json转DataTable

    处理不规则

    /// <summary>
            /// Json 字符串 转换为 DataTable数据集合
            /// </summary>
            /// <param name="json"></param>
            /// <returns></returns>
            public static DataTable ToDataTable(string json)
            {
                DataTable dataTable = new DataTable();  //实例化
                DataTable result;
                try
                {
                    dataTable.Columns.Add("id");
                    dataTable.Columns.Add("mac");
                    dataTable.Columns.Add("rssi");
                    dataTable.Columns.Add("ch");
                    dataTable.Columns.Add("ts");
                    dataTable.Columns.Add("tmc");
                    dataTable.Columns.Add("tc");
                    dataTable.Columns.Add("ds");
                    dataTable.Columns.Add("essid");
                    JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
                    javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
                    ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
                    if (arrayList.Count > 0)
                    {
                        foreach (Dictionary<string, object> dictionary in arrayList)
                        {
                            if (dictionary.Keys.Count<string>() == 0)
                            {
                                result = dataTable;
                                return result;
                            }//Rows
                            string root = "";
                            foreach (string current in dictionary.Keys)
                            {
                                if (current != "data")
                                    root = current;
                                else
                                {
                                    ArrayList list = dictionary[current] as ArrayList;
                                    foreach (Dictionary<string, object> dic in list)
                                    {
                                        DataRow dataRow = dataTable.NewRow();
                                        dataRow[root] = dictionary[root];
                                        foreach (string key in dic.Keys)
                                        {
                                            dataRow[key] = dic[key];
                                        }
                                        dataTable.Rows.Add(dataRow);
                                    }
                                }
                            }
                        }
                    }
                }
                catch
                {
                }
                result = dataTable;
                return result;
            }
    Json转DataTable

    处理复杂

    /// <summary>
            /// Json 字符串 转换为 DataTable数据集合
            /// </summary>
            /// <param name="json"></param>
            /// <returns></returns>
            public static DataTable ToDataTable(string json)
            {
                DataTable dataTable = new DataTable();  //实例化
                DataTable result;
                try
                {
                    JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
                    javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
                    ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
                    if (arrayList.Count > 0)
                    {
                        foreach (Dictionary<string, object> dictionary in arrayList)
                        {
                            if (dictionary.Keys.Count<string>() == 0)
                            {
                                result = dataTable;
                                return result;
                            }
                            //Columns
                            if (dataTable.Columns.Count == 0)
                            {
                                foreach (string current in dictionary.Keys)
                                {
                                    if (current != "data")
                                        dataTable.Columns.Add(current, dictionary[current].GetType());
                                    else
                                    {
                                        ArrayList list = dictionary[current] as ArrayList;
                                        foreach (Dictionary<string, object> dic in list)
                                        {
                                            foreach (string key in dic.Keys)
                                            {
                                                dataTable.Columns.Add(key, dic[key].GetType());
                                            }
                                            break;
                                        }
                                    }
                                }
                            }
                            //Rows
                            string root = "";
                            foreach (string current in dictionary.Keys)
                            {
                                if (current != "data")
                                    root = current;
                                else
                                {
                                    ArrayList list = dictionary[current] as ArrayList;
                                    foreach (Dictionary<string, object> dic in list)
                                    {
                                        DataRow dataRow = dataTable.NewRow();
                                        dataRow[root] = dictionary[root];
                                        foreach (string key in dic.Keys)
                                        {
                                            dataRow[key] = dic[key];
                                        }
                                        dataTable.Rows.Add(dataRow);
                                    }
                                }
                            }
                        }
                    }
                }
                catch
                {
                }
                result = dataTable;
                return result;
            }
    Json转DataTable

    技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
    我创建了一个.NET开发交流群,用于分享学习心得和讨论相关技术难题。欢迎有兴趣的小伙伴扫码入群,相互学习!

  • 相关阅读:
    POJ 3259 Wormholes【BellmanFord】
    POJ 2960 SNim【SG函数的应用】
    ZOJ 3578 Matrixdp水题
    HDU 2897 邂逅明下【bash博弈】
    BellmanFord 算法及其优化【转】
    【转】几个Java的网络爬虫
    thinkphp 反字符 去标签 自动加点 去换行 截取字符串 冰糖
    php 二维数组转 json文本 (jquery datagrid 数据格式) 冰糖
    PHP 汉字转拼音(首拼音,所有拼音) 冰糖
    设为首页与加入收藏 兼容firefox 冰糖
  • 原文地址:https://www.cnblogs.com/wml-it/p/15079719.html
Copyright © 2011-2022 走看看