JSON数据转换DataTable

/// <summary>
/// 将json转换为DataTable
/// </summary>
/// <param name="strJson">得到的json</param>
/// <returns></returns>
private System.Data.DataTable JsonToDataTable(string strJson)
{
      //转换json格式
      strJson = strJson.Replace(",\"", "*\"").Replace("\":", "\"#").ToString();
      //取出表名
      var rg = new System.Text.RegularExpressions.Regex(@"(?<={)[^:]+(?=:\[)", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
      string strName = rg.Match(strJson).Value;
      System.Data.DataTable tb = null;
      //去除表名
     strJson = strJson.Substring(strJson.IndexOf("[") + 1);
    strJson = strJson.Substring(0, strJson.IndexOf("]"));

    //获取数据
    rg = new System.Text.RegularExpressions.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 System.Data.DataTable();
   TableName = strName;
  foreach (string str in strRows)
  {
    var dc = new System.Data.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();
  }

//增加内容
  System.Data.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;
  }

posted @ 2016-11-22 10:08  向往田园  阅读(2227)  评论(0编辑  收藏  举报