首页 > 其他分享 >嵌套Json写入DataTable

嵌套Json写入DataTable

时间:2022-10-11 11:36:56浏览次数:45  
标签:return JTokenType dataArr 嵌套 Json typeof type DataTable

* json中的value的type有时候是个array,DataTable是不能写入这样的json的。但是由于业务需求有时候可能需要将json中的Array也写入DataTable。
* 解决方案是将DataTable中的Array的type改成string,或者直接将这样的value直接转成null。
* 以下有两个解决方法:

 


方法一:在JArray转化成DataTable的时候,在DataTable add Columns的时候,将数据中type是array的,将DataTable的Column的type设定成string。
* ConvertToDataTable

        private DataTable ConvertToDataTable(JArray dataArr)
        {
            if (dataArr == null || dataArr.Count <= 0)
            {
                return new DataTable();
            }
            DataTable result = new DataTable();
            //headername
            var colnames = ((JObject)(dataArr.First)).Properties();
            List<dynamic> columnNames = new List<dynamic>();
            if (colnames == null || colnames.Count() <= 0)
            {
                return null;
            }
            foreach (var item in colnames)
            {
                JTokenType type = item.Value.Type;
                if (!columnNames.Contains(item.Name))
                {
                    columnNames.Add(item.Name);
                }
                //set Columns type
                result.Columns.Add(item.Name, convertJTokenTypeToType(type));
            }


            //add detail
            foreach (JObject data in dataArr)
            {
                JObject jo = JObject.Parse(data.ToString());
                DataRow row = result.NewRow();
                foreach (var columnName in columnNames)
                {
                    if (jo.Property(columnName) == null)
                    {
                        data.Add(columnName, "");
                        row[columnName] = data[columnName];
                    }
                    else
                    {
                        row[columnName] = data[columnName];
                    }
                }
                result.Rows.Add(row);
            }

            if (result == null)
            {
                return new DataTable();
            }
            return result;
        }

 

* set Columns type

        private Type convertJTokenTypeToType(JTokenType jTokenType)
        {
            switch (jTokenType)
            {
                case JTokenType.Boolean:
                    return typeof(bool);
                case JTokenType.Date:
                    return typeof(DateTime);
                case JTokenType.Integer:
                    return typeof(Int64);
                case JTokenType.Float:
                    return typeof(float);
                case JTokenType.TimeSpan:
                    return typeof(TimeSpan);
                default:
                    return typeof(string);
            }
        }

 

方法二:Json转化为JArray后,在JArray转化成DataTable前,将value的type是array的,全部改成string。

        private DataTable ConvertToDataTable(JArray dataArr)
        {
            if (dataArr == null || dataArr.Count <= 0)
            {
                return new DataTable();
            }

            JArray changeType = new JArray();
            for (int i = 0; i < dataArr.Count; i++)
            {
                JObject itemArr = new JObject();
                foreach (dynamic item in dataArr[i])
                {
                    if (item.Value.Type == JTokenType.Array)
                    {
                        object value = item.Value.ToString();
                        JToken objValue = JToken.FromObject(value);
                        JProperty obj = new JProperty(item.Name.ToString(), objValue);
                        itemArr.Add(obj);
                    }
                    else if(item.Value.Type == null)
                    {
                        object value = item.Value.ToString();
                        JToken objValue = JToken.FromObject(value);
                        JProperty obj = new JProperty(item.Name.ToString(), objValue);
                        itemArr.Add(obj);
                    }
                    else
                    {
                        itemArr.Add(item);
                    }
                }
                changeType.Add(itemArr);
            }

            //jarray to DataTable;
            DataTable? result = JsonConvert.DeserializeObject<DataTable>(JsonConvert.SerializeObject(changeType));

            if (result == null)
            {
                return new DataTable();
            }

            return result;
        }

 

标签:return,JTokenType,dataArr,嵌套,Json,typeof,type,DataTable
From: https://www.cnblogs.com/fishanan/p/16778633.html

相关文章

  • json 格式化输出
    importjsond={"a":"我们","b":"test"}print(json.dumps(d))#{"a":"\u6211\u4eec","b":"test"}print(json.dumps(d,ensure_ascii=False,indent=2))"""{"a......
  • page.json
    uni-app需要给page.json文件需要进行配置路由,否则会不报错,也跳转不过去......
  • vscode settings.json配置项
    安装通用插件1、Prettier-Codeformatter2、Vue3Snippets3、VueLanguageFeatures(Volar)安装项目依赖npminstalleslint-plugin-vue@typescrip......
  • YII框架的自定义布局(嵌套式布局,版本是1.1.20)
    0x01创建控制器0x02创建文件夹,之后创建视图文件0x03浏览器访问cxy/index控制器,验证以上就是使用默认的布局,非常简单,那么如果我不想用YII框架默认的布局呢,我想用自定义的......
  • XML和JSON数据格式
    目录​​XML​​​​DTD(文档类型定义)​​​​DTD实体​​​​JSON​​​​使用python解析JSON数据​​​​XML和JSON的区别 ​​​​XML的优缺点​​​​JSON的优缺点​......
  • net core 动态设置appsettings.json
    配置基类该类主要用于判断传递的值是否为类对象,方便赋值1publicinterfaceIBaseConfigEntity2{34} 配置类 建立配置存储类1publicc......
  • C# 导出DataTable到Excel
    1///<summary>2///将DataTable数据,存储到一个Excel中(.xlsx)3///</summary>4///<paramname="dt"></param>5///<paramname="filePath"></param>6pub......
  • ABAP数据转Json
    Json数据类型对应ABAP的定义jsonabap备注字符串string、char 数字p、i 对象结构体、内表 数组string需要而外写逻辑处理布尔abap_boola......
  • Vue系列---【at Socket.writeAfterFIN [as write] (net.js:441:14) at PoolWorker
    1.问题描述:前端是vue项目,打包和打镜像的时候,本地没问题,jenkins物理机打流水线也没问题,但是到容器云平台使用自带的流水线打包打镜像的时候,就报错了。上次成功上线的代......
  • 函数嵌套
    #defouter1():#o=65#definner():#print("inner{}".format(o))#print(chr(o))#print("outer{}".format(o))#inner()#outer1()defouter1():......