- 注册时间
- 2017-6-15
- 最后登录
- 2023-7-13
- 阅读权限
- 10
- 积分
- 2
- 精华
- 0
- 帖子
- 0
![Rank: 1](static/image/common/star_level1.gif)
|
前台getData获取到的数据在转成JSON后,字段顺序不一致
由于后台想直接将JSON转换成DataTable传给数据库操作,但在转成datatable这一步由于字段顺序不一致,会造成值错位,生成的datatable是错误的,想问下,前台有没有什么办法能规定字段的顺序?
取到的JSON字符串
[
{"cgsl_text":289,"dw":"1","cgid":129,"gg":"啊啊啊","pm":"A1","sccs":"CS1","cgsl":160,"cglszh":3,"dj":23.4568,"je":1876.544,"fhsl":80,"ph":"76887","scrq":"2017-03-13T00:00:00","xq":"2020-06-19T00:00:00","_id":26,"_uid":26,"_state":"added"},
{"cgsl_text":289,"dw":"1","cgid":129,"gg":"OOOO","pm":"A2","sccs":"CS2","cgsl":160,"cglszh":3,"dj":23.4568,"je":2111.112,"fhsl":90,"ph":"5rew3","scrq":"2016-06-20T00:00:00","xq":"2020-06-19T00:00:00","_id":27,"_uid":27,"_state":"added"},
{"cgsl_text":289,"dw":"1","cgid":129,"gg":"AAAA","pm":"A3","sccs":"CS3","cgsl":160,"cglszh":3,"dj":23.4568,"_id":23,"_uid":23,"je":23.4568,"_state":"modified","fhsl":1,"ph":"43t5","scrq":"2016-06-20T00:00:00","xq":"2020-06-19T00:00:00"},
{"cgsl_text":332,"dw":"1","cgid":132,"gg":"BBB","pm":"A4","sccs":"CS4","cgsl":200,"cglszh":3,"dj":234,"_id":24,"_uid":24,"scrq":"2016-06-20T00:00:00","_state":"modified","xq":"2019-06-15T00:00:00","ph":"87yuj","je":23400,"fhsl":100},
{"cgsl_text":248,"dw":"1","cgid":158,"gg":"BVBB","pm":"A5","sccs":"CS5","cgsl":90,"cglszh":3,"dj":1.345456,"xq":"2019-06-15T00:00:00","je":80.72736,"fhsl":60,"scrq":"2016-06-20T00:00:00","ph":"67yft","_id":28,"_uid":28,"_state":"added"},
生成方法
public static DataTable Json2DataTable(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.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;
}
|
|