• 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开发交流群,用于分享学习心得和讨论相关技术难题。欢迎有兴趣的小伙伴扫码入群,相互学习!

  • 相关阅读:
    Redis实战之Redis + Jedis[转]
    FastDFS、nginx配置手记
    服务器后端开发系列——《实战FastDFS分布式文件系统》[转]
    FastDFS分布文件系统[转]
    在XMPP的JAVA开源实现Openfire中,增加LBS 附近的人功能
    FASTDFS 5X安装
    助力互联网创业融资
    lucene索引并搜索mysql数据库[转]
    ZooKeeper监控
    光驱在资源管理器显示黄色感叹号的解决方法BIOS内有 系统下没有
  • 原文地址:https://www.cnblogs.com/wml-it/p/15079719.html
Copyright © 2020-2023  润新知