將JSON轉成DataSet(DataTable)

將JSON轉成DataSet(DataTable) - hy31337html

原文 http://www.cnblogs.com/elves/p/3604499.html 主題 JSON 方法1:json

/// <summary> /// 將JSON解析成DataSet只限標準的JSON數據 /// 例如:Json={t1:[{name:'數據name',type:'數據type'}]} /// 或 Json={t1:[{name:'數據name',type:'數據type'}],t2:[{id:'數據id',gx:'數據gx',val:'數據val'}]} /// </summary> /// <param name="Json">Json字符串</param> /// <returns>DataSet</returns> public static DataSet JsonToDataSet(string Json) { try { DataSet ds = new DataSet(); JavaScriptSerializer JSS = new JavaScriptSerializer();code

object obj = JSS.DeserializeObject(Json);
            Dictionary<string, object> datajson = (Dictionary<string, object>)obj;


            foreach (var item in datajson)
            {
                DataTable dt = new DataTable(item.Key);
                object[] rows = (object[])item.Value;
                foreach (var row in rows)
                {
                    Dictionary<string, object> val = (Dictionary<string, object>)row;
                    DataRow dr = dt.NewRow();
                    foreach (KeyValuePair<string, object> sss in val)
                    {
                        if (!dt.Columns.Contains(sss.Key))
                        {
                            dt.Columns.Add(sss.Key.ToString());
                            dr[sss.Key] = sss.Value;
                        }
                        else
                            dr[sss.Key] = sss.Value;
                    }
                    dt.Rows.Add(dr);
                }
                ds.Tables.Add(dt);
            }
            return ds;
        }
        catch
        {
            return null;
        }
    }

方法2:htm

/// <summary>   
    /// 根據Json返回DateTable,JSON數據格式如:   
    /// {table:[{column1:1,column2:2,column3:3},{column1:1,column2:2,column3:3}]}   
    /// items:{"2750884":{clicknum:"50",title:"鮑魚",href:"/shop/E06B14B40110/dish/2750884#menu",desc:"<br/>",src:"15f38721-49da-48f0-a283-8057c621b472.jpg",price:78.00,units:"",list:[],joiner:""}}
    /// </summary>   
    /// <param name="strJson">Json字符串</param>   
    /// <returns></returns>   
    public static DataTable JsonToDataTable(string strJson)
    {
        //取出表名   
        //var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);
        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(@"(?<={)[^}]+(?=})");
        rg = new Regex(@"(?<={)[^}]+(?=})");

        System.Text.RegularExpressions.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(':');
                    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("\"", "");
                dr[r] = strRows[r];
            }
            tb.Rows.Add(dr);
            tb.AcceptChanges();
        }

        return tb;
    }
相關文章
相關標籤/搜索