【笔记】nodejs读取JSON,数组转树
const fs = require('fs'); // --------------- 读取源文件 --------------- const originData = require('./vuxArea3.json'); // --------------- 常量 --------------- const constant = { ARRAY_TYPE: 'Array', JSON_TYPE: 'Json', }; // --------------- 转换的配置 --------------- const config = { originKey: { children: null, parent: 'parent', value: 'value', label: 'name' }, originType: constant.ARRAY_TYPE, targetKey: { children: 'children', parent: null, value: 'value', label: 'label' }, targetType: constant.JSON_TYPE }; // --------------- 转换函数 --------------- function convertArrayToJson(initData, { originKey, targetKey }) { if (!initData || initData.length === 0) return []; if (!initData.length === 1) return initData; if (!(initData instanceof Array)) return [initData]; const result = []; const tempMap = []; const key = originKey.value; const parentKey = originKey.parent; const l = initData.length; let i; // key转换 const data = initData.map(item => ({ [originKey.parent]: item[originKey.parent], [targetKey.value]: item[originKey.value], [targetKey.label]: item[originKey.label] })); // 临时引用 for (i = 0; i < l; i += 1) { tempMap[data[i][key]] = data[i]; } // 叶子通过临时引用挂载,利用所有的节点都是单例,才可以通过临时引用去挂载叶子 // 根元素直接push到根节点 for (i = 0; i < l; i += 1) { const parentValue = data[i][parentKey]; // 当前元素存在父元素,并且子不等于父 if (tempMap[parentValue] && data[i][key] !== parentValue) { // 父元素上在children上加上当前元素 tempMap[parentValue][targetKey.children] = tempMap[parentValue][targetKey.children] || []; tempMap[parentValue][targetKey.children].push(data[i]); } else { // 当前元素是根元素 result.push(data[i]); } } return result; } function convert(data, { originKey, originType, targetKey, targetType }) { if (originType === constant.ARRAY_TYPE && targetType === constant.JSON_TYPE) { return convertArrayToJson(data, { originKey, targetKey }); } return []; } // --------------- 执行 --------------- const result = convert(originData, config); let resultStr = ''; try { resultStr = JSON.stringify(result); } catch (e) { console.log(e); } resultStr = resultStr.replace(/"parent":"[a-zA-Z\d]+",/g, ''); // --------------- 写入 --------------- fs.writeFile('./result.json', resultStr, 'utf-8', (err) => { if (err) { console.log(err); } else { console.log(`### conver ${config.originType} to ${config.targetType} success! `); } });
【笔记】nodejs读取JSON,数组转树的更多相关文章
- 七、Delphi10.3读取JSON数组
一.Delphi读取JSON数组是非常方便的,首先我们网上找一段JSON数据 { "error": 0, "status": "success&quo ...
- Jackson将json string转为Object,org.json读取json数组
从json文件读取json string或者自定义json string,将其转为object.下面采用的object为map,根据map读取json的某个数据,可以读取第一级的数据name,后来发现 ...
- nodejs读取json文件,写入mongodb数据库
最近又一点时间,开始使用mongodb存储json模型文件,然后可以实现模型文件的在线编辑和管理.今天上午实现了json文件入库的代码,如下: var fs=require("fs" ...
- 遍历json数组实现树
今天小颖在工作中遇到要遍历树得问题了,实现后,怕后期遇到又忘记啦,所以记录下嘻嘻,其实这个和小颖之前写过得一篇文章 json的那些事 中第4点有关json的面试题有些类似. 数组格式: v ...
- C# Json数组序列化和反序列总结
1.创建json数组,例: JArray arrFile = new JArray(); arrFile.Add(new JObject() { new JProperty("FilePat ...
- 【Spring学习笔记-MVC-6】SpringMVC 之@RequestBody 接收Json数组对象
作者:ssslinppp 1. 摘要 程序流程: 前台使用ajax技术,传递json字符串到后台: 后台使用Spring MVC注解@RequestBody 接受前台传递的json字符串, ...
- [学习笔记]可持久化数据结构——数组、并查集、平衡树、Trie树
可持久化:支持查询历史版本和在历史版本上修改 可持久化数组 主席树做即可. [模板]可持久化数组(可持久化线段树/平衡树) 可持久化并查集 可持久化并查集 主席树做即可. 要按秩合并.(路径压缩每次建 ...
- Java学习笔记-文件读写和Json数组
Java文件读写 Java中I/O流对文件的读写有很多种方法,百度后主要看了以下三种 第一种方式:使用FileWriter和FileReader,对文件内容按字符读取,代码如下 String dir ...
- 八、Delphi10.3读取JSON文件,并修改JSON数组一条内容后保存到文件
一.我们有一个JSON文件,如下: { "在野": [ { "城池": 0, "武将": 74, "登场年": 190 ...
随机推荐
- Ant学习笔记
前言:这段时间在学习Ant,发现这是一个很强大的构建工具.你可能使用了很长一段时间,才发现Ant能做数不完的事.总之,个人觉得,Ant学习门槛低,入门简单,能大概看懂程序,写一些简单的脚本即可,剩下在 ...
- ArcGIS API for JavaScript 4.2学习笔记[18] 搜索小部件
这个例子很简单,作为开学后(暴露出学生党的本质)的开胃菜是再合适不过了. 不过,博主提前警告一下:接下来的例子会相当的长.烦.难.我还会用"引用"-"函数参数骨架&quo ...
- UVA 10891 Game of Sum
题目大意就是有一个整数串,有两个人轮流取,每次可以取走一个前缀或后缀.两人都足够聪明,且都会使自己收益最大.求取完后先手比后手多多少. 每次我看见上面那句就会深感自己的愚笨无知. 所以来推推性质? 1 ...
- 视觉SLAM的方案总结
MoNoSLAM:https://github.com/hanmekim/SceneLib2 以扩展卡尔曼滤波为后端,追踪前端非常稀疏的特征点,以相机的当前状态和所有路标点为状态量,更新其均值和协方差 ...
- 麻瓜之我要学sql,啦啦啦啦
四张表 学生表:编号,姓名,性别,班级,生日 CREATE TABLE IF NOT EXISTS student( sno TINYINT UNSIGNED NOT NULL, sname ) NO ...
- 当你的电脑出现stop: 0X0000007B
这几天可算是把我折腾惨了.先是linux系统无法进入图形化桌面,几经折腾,我把linux删除重装.怎知道,我在瘟都死下删除linux的分区,结果我的两个瘟都死分区也没了,哭了我去恢复数据,但是然并卵. ...
- HBase资料
http://blog.csdn.net/ymh198816/article/details/51244911 https://www.cnblogs.com/JingJ/p/4521245.html ...
- Vuejs之开发环境搭建
Vue.js Vue.js是目前很火的一个前端框架,采用MVVM模式设计,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快 ...
- python科学计算_numpy_ndarray
ndarray:n-dimensional array object,即多维数组对象,是python自带的array对象的扩展,array对象和list对象的区别是array对象的每一个元素都是数值, ...
- 微信小程序之HTTPS请求
1.wx.request wx.request发起的是 HTTPS 请求,以下是它的基本用法,这里不再啰嗦 https://mp.weixin.qq.com/debug/wxadoc/dev/api/ ...