jQuery MiniUI

 找回密码
 立即注册
查看: 2117|回复: 2
打印 上一主题 下一主题

getData获取的grid的JSON字符串,字段乱序有没有解决办法? [复制链接]

Rank: 1

跳转到指定楼层
楼主
发表于 2017-6-22 12:50:51 |只看该作者 |倒序浏览
前台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;
        }

Rank: 1

沙发
发表于 2017-6-22 14:48:00 |只看该作者
https://dotblogs.com.tw/shadow/archive/2011/11/30/60083.aspx
我自己去查了Json.NET转datatable的方法,这个可以实现

Rank: 8Rank: 8

板凳
发表于 2017-6-22 15:20:37 |只看该作者
meriberry 发表于 2017-6-22 14:48
https://dotblogs.com.tw/shadow/archive/2011/11/30/60083.aspx
我自己去查了Json.NET转datatable的方法, ...

给力

Archiver|普加软件

GMT+8, 2024-7-1 00:09 , Processed in 1.050240 second(s), 10 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部