一个层级结构很深的json对象

下面的代码是JSON扁平化的帮助类:

声明:

  1. 由于层级的json对象中名字可能会有重复,所有扁平化时key值带上了父级的key
  2. 使用一个key的list列表,来判断是否有重复的键插入,如果键已经存在,则跳过。
  3. 如果对于每个字段的信息都不可或缺,可以再判断有重复键的时候,修改键值名称,就能正常获取插入值了。

代码如下:

using System.Collections.Generic;
using Newtonsoft.Json.Linq;namespace MongoDBAccess
{public class JsonHelper{private readonly List<string> _keys = new List<string>();public string ToFlat(JObject obj, string parent){string result = null;foreach (var item in obj){if (typeof(JObject) == item.Value.GetType()){var child = (JObject)item.Value;var tmp = ToFlat(child, item.Key);result += tmp;}else if (typeof(JArray) == item.Value.GetType()){var jarray = (JArray)item.Value;if (jarray.Count == 0 && !_keys.Contains(item.Key)){result += string.Format("'{0}':{1},", item.Key, new JArray());_keys.Add(item.Key);}else{foreach (var jitem in jarray){if (jitem.HasValues){var jchild = (JObject)jitem;string tmp = ToFlat(jchild, item.Key);result += tmp;}else if(!_keys.Contains(item.Key)){result += string.Format("'{0}':{1},", item.Key, new JArray(){jitem});_keys.Add(item.Key);}}}}else{var value = item.Value ?? " ";if (string.IsNullOrEmpty(parent) && !_keys.Contains(item.Key)){result += string.Format("'{0}':\"{1}\",", item.Key, value);_keys.Add(item.Key);}else if (!_keys.Contains(parent + "_" + item.Key)){result += string.Format("'{0}_{1}':'{2}',", parent, item.Key, value);_keys.Add(parent + "_" + item.Key);}}}return result;}}
}

JSON——Json对象扁平化相关推荐

  1. JSON数据处理之扁平化对象输出

    有时候返回json的数据中的属性存在在多个对象之中.我们期望它能够整合起来,去掉对象的外衣.这个简单理解为对象扁平化 @Getter @Setter @ToString public class Ac ...

  2. 利用Gson对json进行flatten(扁平化)处理

    目录 一.Gson的简单介绍 二.通过构建json树实现两层json的解析 三.通过递归实现多层json的解析 一.Gson的简单介绍 Gson是Google发布的一个处理json的java库.通过使 ...

  3. JavaScript 对象扁平化

    JavaScript对象扁平化 我们平时肯定遇到过多层嵌套的对象,name如何将它扁平化呢?一起来看看吧! 函数封装如下: function flatten (obj) {const ans = {} ...

  4. 我知道的JavaScript--Json对象扁平化

    引子: 在Asp.net mvc 框架下用Ajax方法提交一个复杂的Json 对象到Action方法上, 会出现一些问题,这里我们用Javascript 的方式去解决这个问题,在asp.net mvc ...

  5. Java对象扁平化的操作

    // 此处使用lombok @Data public class User {private String name;private Wife wife;private List<Childre ...

  6. js的tree数组对象扁平化思否_JS专题之数组展开

    前言 首先什么是数组展开? 假如现在有这样一个需求:将后台的一个多重 List 数据,展开成一个 List 后,并去重后排序: ["a", "b", [&quo ...

  7. js的tree数组对象扁平化思否_js 中的tree型数组如何去重与合并?

    假设数据是这样的,不难发现,其中父级roleCode有重复的,子级roleCode也有重复的,如何做到把重复的去掉,同时,又可以把不重复的合并到一起呢? testTreeData: [ { roleC ...

  8. 树形json扁平化,一维数组树状化,对象深拷贝,元素后插入新元素,格式或动态路由等常用js合集

    索引 一.在元素后面插入一个新的元素. 二.对象或者数组的深拷贝. 三.从服务器端获取到动态路由表的格式化. 四.json树形数据扁平化处理(变成一维数组) 五.一维数组转化为树状结构对象. 六.防抖 ...

  9. 利用递归实现JSON扁平化

    1.引入JSON依赖包 把字符串解释成JSON再进行扁平化处理         <dependency>             <groupId>com.alibaba< ...

最新文章

  1. xFire客户端代码
  2. android 回退 activity,Android Activity要点(2)
  3. 【代码】python paramiko模块代码示例:远程执行命令及上传和下载
  4. Django 3.2.5博客开发教程:实现模板之前的分析与准备
  5. python多核运行程序怎么关闭_在多核上运行程序
  6. mysql php 新手卡生成_6个强大的PHP/Mysql代码生成器介绍
  7. 爬虫那些事儿-- 简介
  8. VS Code 下载
  9. W3C近期要闻:与Mozilla MDN合作联合开发Web平台文档
  10. Python、Java 在线笔试
  11. 2021全国研究生数学建模竞赛F题思路
  12. java幸运观众抽取_Java利用数组随机抽取幸运观众如何实现
  13. 以太坊区块链中的数据结构
  14. Arduino C语言 240*240 TFT 显示屏绘制表盘手把手教学,粗暴易懂
  15. 51单片机基础——数码管数组动态显示0—F
  16. QT creator 新建项目
  17. RT-Thread进阶之低功耗PM组件应用笔记
  18. 现在投资区块链还来得及吗?一个因素决定IPFS的颠覆价值
  19. Panda3D绘制立方体
  20. listen的第二个参数详解

热门文章

  1. 第17天 命令行窗口
  2. 总结在mac电脑上安装brew
  3. PDF转长图片怎么转?不妨试试这个方法
  4. 使用Java-Hanlp训练CRF模型
  5. Mapbox简易入门教程
  6. 找一份好工作只需要这几招
  7. 公司工作流程开发培训
  8. 学习arduino esp32相关例程(1)深度睡眠与唤醒
  9. 你了解眼角膜移植术吗?哪些眼疾需要接受角膜移植呢?
  10. linux自带截图工具使用