JSON——Json对象扁平化
一个层级结构很深的json对象
下面的代码是JSON扁平化的帮助类:
声明:
- 由于层级的json对象中名字可能会有重复,所有扁平化时key值带上了父级的key
- 使用一个key的list列表,来判断是否有重复的键插入,如果键已经存在,则跳过。
- 如果对于每个字段的信息都不可或缺,可以再判断有重复键的时候,修改键值名称,就能正常获取插入值了。
代码如下:
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对象扁平化相关推荐
- JSON数据处理之扁平化对象输出
有时候返回json的数据中的属性存在在多个对象之中.我们期望它能够整合起来,去掉对象的外衣.这个简单理解为对象扁平化 @Getter @Setter @ToString public class Ac ...
- 利用Gson对json进行flatten(扁平化)处理
目录 一.Gson的简单介绍 二.通过构建json树实现两层json的解析 三.通过递归实现多层json的解析 一.Gson的简单介绍 Gson是Google发布的一个处理json的java库.通过使 ...
- JavaScript 对象扁平化
JavaScript对象扁平化 我们平时肯定遇到过多层嵌套的对象,name如何将它扁平化呢?一起来看看吧! 函数封装如下: function flatten (obj) {const ans = {} ...
- 我知道的JavaScript--Json对象扁平化
引子: 在Asp.net mvc 框架下用Ajax方法提交一个复杂的Json 对象到Action方法上, 会出现一些问题,这里我们用Javascript 的方式去解决这个问题,在asp.net mvc ...
- Java对象扁平化的操作
// 此处使用lombok @Data public class User {private String name;private Wife wife;private List<Childre ...
- js的tree数组对象扁平化思否_JS专题之数组展开
前言 首先什么是数组展开? 假如现在有这样一个需求:将后台的一个多重 List 数据,展开成一个 List 后,并去重后排序: ["a", "b", [&quo ...
- js的tree数组对象扁平化思否_js 中的tree型数组如何去重与合并?
假设数据是这样的,不难发现,其中父级roleCode有重复的,子级roleCode也有重复的,如何做到把重复的去掉,同时,又可以把不重复的合并到一起呢? testTreeData: [ { roleC ...
- 树形json扁平化,一维数组树状化,对象深拷贝,元素后插入新元素,格式或动态路由等常用js合集
索引 一.在元素后面插入一个新的元素. 二.对象或者数组的深拷贝. 三.从服务器端获取到动态路由表的格式化. 四.json树形数据扁平化处理(变成一维数组) 五.一维数组转化为树状结构对象. 六.防抖 ...
- 利用递归实现JSON扁平化
1.引入JSON依赖包 把字符串解释成JSON再进行扁平化处理 <dependency> <groupId>com.alibaba< ...
最新文章
- xFire客户端代码
- android 回退 activity,Android Activity要点(2)
- 【代码】python paramiko模块代码示例:远程执行命令及上传和下载
- Django 3.2.5博客开发教程:实现模板之前的分析与准备
- python多核运行程序怎么关闭_在多核上运行程序
- mysql php 新手卡生成_6个强大的PHP/Mysql代码生成器介绍
- 爬虫那些事儿-- 简介
- VS Code 下载
- W3C近期要闻:与Mozilla MDN合作联合开发Web平台文档
- Python、Java 在线笔试
- 2021全国研究生数学建模竞赛F题思路
- java幸运观众抽取_Java利用数组随机抽取幸运观众如何实现
- 以太坊区块链中的数据结构
- Arduino C语言 240*240 TFT 显示屏绘制表盘手把手教学,粗暴易懂
- 51单片机基础——数码管数组动态显示0—F
- QT creator 新建项目
- RT-Thread进阶之低功耗PM组件应用笔记
- 现在投资区块链还来得及吗?一个因素决定IPFS的颠覆价值
- Panda3D绘制立方体
- listen的第二个参数详解