将JSON转成DataSet(DataTable)

将JSON转成DataSet(DataTable)

方法1:

/// <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();


        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:

/// <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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值