将平面 JSON 文件转换为分层 json 数据,如flare.json [d3 示例文件]

编程入门 行业动态 更新时间:2024-10-14 14:14:18
本文介绍了将平面 JSON 文件转换为分层 json 数据,如flare.json [d3 示例文件]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

经过一场麻烦的战斗后,我几乎想出了如何将平面 json 文件转换为分层文件的方法.函数不是我自己写的.我从下面的帖子中复制了它.

D3 JSON 数据转换

但现在的问题是,在帖子中编写的函数只有 2 个层次结构.但我正在寻找 4 级层次结构.我试图覆盖我失败的函数.

用我正在尝试的方式编写代码.

变量数据 = [{ "dep": "First Top", "name": "First child", "model": "value1", "size": "320" },{ "dep": "First Top", "name": "First child", "model": "value2", "size": "320" },{ "dep": "First Top", "name": "First child", "model": "value3", "size": "320" },{ "dep": "First Top", "name": "First child", "model": "value4", "size": "320" },{ "dep": "First Top", "name": "SECOND CHILD", "model": "value1", "size": "320" },{ "dep": "First Top", "name": "SECOND CHILD", "model": "value2", "size": "320" },{ "dep": "First Top", "name": "SECOND CHILD", "model": "value3", "size": "320" },{ "dep": "First Top", "name": "SECOND CHILD", "model": "value4", "size": "320" },{ "dep": "Second Top", "name": "First Child", "model": "value1", "size": "320" },{ "dep": "Second Top", "name": "First Child", "model": "value2", "size": "320" },{ "dep": "Second Top", "name": "First Child", "model": "value3", "size": "320" },{ "dep": "Second Top", "name": "First Child", "model": "value4", "size": "320" },{ "dep": "第二名", "name": "SECOND CHILD", "model": "value1", "size": "320" },{ "dep": "第二名", "name": "SECOND CHILD", "model": "value2", "size": "320" },{ "dep": "Second Top", "name": "SECOND CHILD", "model": "value3", "size": "320" },{ "dep": "第二名", "name": "SECOND CHILD", "model": "value4", "size": "320" },{ "dep": "Third Top", "name": "First Child", "model": "value2", "size": "320" },{ "dep": "Third Top", "name": "First Child", "model": "value3", "size": "320" },{ "dep": "Third Top", "name": "First Child", "model": "value4", "size": "320" },{ "dep": "Third Top", "name": "First Child", "model": "value5", "size": "320" },{ "dep": "Third Top", "name": "Second Child", "model": "value1", "size": "320" },{ "dep": "Third Top", "name": "Second Child", "model": "value2", "size": "320" },{ "dep": "Third Top", "name": "Second Child", "model": "value3", "size": "320" },{ "dep": "Third Top", "name": "Second Child", "model": "value4", "size": "320" }]var newData = {"name":"root", "children":{}}data.forEach(函数(d){if(typeof newData.children[d.dep] !== 'undefined') {newData.children[d.dep].children.push(d)} 别的 {newData.children[d.dep] = {"name": d.dep, "children": [{"name": d.name, "children": [{"name": d.model, "size":d.大小}]}]}}})newData.children = Object.keys(newData.children).map(function (key) { return newData.children[key]; });//显示我们有什么d3.select('body').append('pre').text(JSON.stringify(newData, null, ' '));

输出当前代码

{"name": "root",孩子们": [{"name": "第一顶",孩子们": [{"name": "第一个孩子",孩子们": [{"name": "value1",尺寸":320"}]},{"dep": "第一顶","name": "第一个孩子",模型":值2",尺寸":320"},{"dep": "第一顶","name": "第一个孩子",模型":值3",尺寸":320"},{"dep": "第一顶","name": "第一个孩子",模型":值4",尺寸":320"},{"dep": "第一顶","name": "第二个孩子",模型":值1",尺寸":320"},{"dep": "第一顶","name": "第二个孩子",模型":值2",尺寸":320"},{"dep": "第一顶","name": "第二个孩子",模型":值3",尺寸":320"},{"dep": "第一顶","name": "第二个孩子",模型":值4",尺寸":320"}]},{"name": "第二名",孩子们": [{"name": "第一个孩子",孩子们": [{"name": "value1",尺寸":320"}]},{"dep": "第二名","name": "第一个孩子",模型":值2",尺寸":320"},{"dep": "第二名","name": "第一个孩子",模型":值3",尺寸":320"},{"dep": "第二名","name": "第一个孩子",模型":值4",尺寸":320"},{"dep": "第二名","name": "第二个孩子",模型":值1",尺寸":320"},{"dep": "第二名","name": "第二个孩子",模型":值2",尺寸":320"},{"dep": "第二名","name": "第二个孩子",模型":值3",尺寸":320"},{"dep": "第二名","name": "第二个孩子",模型":值4",尺寸":320"}]},{"name": "第三名",孩子们": [{"name": "第一个孩子",孩子们": [{"name": "value2",尺寸":320"}]},{"dep": "第三名","name": "第一个孩子",模型":值3",尺寸":320"},{"dep": "第三名","name": "第一个孩子",模型":值4",尺寸":320"},{"dep": "第三名","name": "第一个孩子",模型":值5",尺寸":320"},{"dep": "第三名","name": "第二个孩子",模型":值1",尺寸":320"},{"dep": "第三名","name": "第二个孩子",模型":值2",尺寸":320"},{"dep": "第三名","name": "第二个孩子",模型":值3",尺寸":320"},{"dep": "第三名","name": "第二个孩子",模型":值4",尺寸":320"}]}]}

所需的输出格式:

{"name": "root",孩子们": [{"name": "第一顶",孩子们": [{"name": "第一个孩子",孩子们": [{"name": "value1",尺寸":320"},{"name": "value2",尺寸":320"},{"name": "value3",尺寸":320"},{"name": "value4",尺寸":320"}]},{"name": "第二个孩子",孩子们": [{"name": "value1",尺寸":320"},{"name": "value2",尺寸":320"},{"name": "value3",尺寸":320"},{"name": "value4",尺寸":320"}]},]},{"name": "第二名",孩子们": [{"name": "第一个孩子",孩子们": [{"name": "value1",尺寸":320"},{"name": "value2",尺寸":320"},{"name": "value3",尺寸":320"},{"name": "value4",尺寸":320"}]},{"name": "第二个孩子",孩子们": [{"name": "value1",尺寸":320"},{"name": "value2",尺寸":320"},{"name": "value3",尺寸":320"},{"name": "value4",尺寸":320"}]},]},{"name": "第三名",孩子们": [{"name": "第一个孩子",孩子们": [{"name": "value1",尺寸":320"},{"name": "value2",尺寸":320"},{"name": "value3",尺寸":320"},{"name": "value4",尺寸":320"}]},{"name": "第二个孩子",孩子们": [{"name": "value1",尺寸":320"},{"name": "value2",尺寸":320"},{"name": "value3",尺寸":320"},{"name": "value4",尺寸":320"}]},]}]}

一个星期以来我的头都碎了,但我一个人无法弄清楚.有人请修改函数以获取我更新的分层格式的数据.

提前致谢!!

解决方案

更新为使用递归方法

这应该适用于 n 个级别,而不仅仅是 2 或 3.您只需要指定哪些属性定义了哪些级别.

var 数据 = [{ "dep": "First Top", "name": "First child", "model": "value1", "size": "320" },{ "dep": "First Top", "name": "First child", "model": "value2", "size": "320" },{ "dep": "First Top", "name": "SECOND CHILD", "model": "value1", "size": "320" },{ "dep": "Second Top", "name": "First Child", "model": "value1", "size": "320" }];var newData = { name :"root", children : [] },级别 = ["dep","name"];//对于每个数据行,遍历遍历输出树的预期级别data.forEach(函数(d){//将此作为对当前级别的引用var depthCursor = newData.children;//一次下降一级水平.forEach(功能(属性,深度){//查看是否已经创建了一个分支无功指数;depthCursor.forEach(function(child,i){if (d[property] == child.name) index = i;});//如果不存在,则添加一个分支如果(isNaN(索引)){depthCursor.push({ name : d[property], children : []});index = depthCursor.length - 1;}//现在当我们深入到树中时引用新的子数组depthCursor = depthCursor[index].children;//这是一个叶子,所以将最后一个元素添加到指定的分支if ( depth === levels.length - 1 ) depthCursor.push({ name : d.model, size : d.size });});});

After a troublesome fight i almost figured how to convert a flat json file to a Hierarchical one. I didn't write the function by my own. I copied it from the below post.

D3 JSON DATA CONVERSION

But now the problem now is, the function which was written in the post has just 2 levels of hierarchy. But i'm looking for 4 levels hierarchy. I tried to override the function where i failed but.

Code with what i'm trying.

var data = [ { "dep": "First Top", "name": "First child", "model": "value1", "size": "320" }, { "dep": "First Top", "name": "First child", "model": "value2", "size": "320" }, { "dep": "First Top", "name": "First child", "model": "value3", "size": "320" }, { "dep": "First Top", "name": "First child", "model": "value4", "size": "320" }, { "dep": "First Top", "name": "SECOND CHILD", "model": "value1", "size": "320" }, { "dep": "First Top", "name": "SECOND CHILD", "model": "value2", "size": "320" }, { "dep": "First Top", "name": "SECOND CHILD", "model": "value3", "size": "320" }, { "dep": "First Top", "name": "SECOND CHILD", "model": "value4", "size": "320" }, { "dep": "Second Top", "name": "First Child", "model": "value1", "size": "320" }, { "dep": "Second Top", "name": "First Child", "model": "value2", "size": "320" }, { "dep": "Second Top", "name": "First Child", "model": "value3", "size": "320" }, { "dep": "Second Top", "name": "First Child", "model": "value4", "size": "320" }, { "dep": "Second Top", "name": "SECOND CHILD", "model": "value1", "size": "320" }, { "dep": "Second Top", "name": "SECOND CHILD", "model": "value2", "size": "320" }, { "dep": "Second Top", "name": "SECOND CHILD", "model": "value3", "size": "320" }, { "dep": "Second Top", "name": "SECOND CHILD", "model": "value4", "size": "320" }, { "dep": "Third Top", "name": "First Child", "model": "value2", "size": "320" }, { "dep": "Third Top", "name": "First Child", "model": "value3", "size": "320" }, { "dep": "Third Top", "name": "First Child", "model": "value4", "size": "320" }, { "dep": "Third Top", "name": "First Child", "model": "value5", "size": "320" }, { "dep": "Third Top", "name": "Second Child", "model": "value1", "size": "320" }, { "dep": "Third Top", "name": "Second Child", "model": "value2", "size": "320" }, { "dep": "Third Top", "name": "Second Child", "model": "value3", "size": "320" }, { "dep": "Third Top", "name": "Second Child", "model": "value4", "size": "320" } ] var newData = {"name":"root", "children":{}} data.forEach(function(d){ if(typeof newData.children[d.dep] !== 'undefined') { newData.children[d.dep].children.push(d) } else { newData.children[d.dep] = {"name": d.dep, "children": [{"name": d.name, "children": [{"name": d.model, "size": d.size}]}]} } }) newData.children = Object.keys(newData.children).map(function (key) { return newData.children[key]; }); // show what we've got d3.select('body').append('pre') .text(JSON.stringify(newData, null, ' '));

Output of the current code

{ "name": "root", "children": [ { "name": "First Top", "children": [ { "name": "First child", "children": [ { "name": "value1", "size": "320" } ] }, { "dep": "First Top", "name": "First child", "model": "value2", "size": "320" }, { "dep": "First Top", "name": "First child", "model": "value3", "size": "320" }, { "dep": "First Top", "name": "First child", "model": "value4", "size": "320" }, { "dep": "First Top", "name": "SECOND CHILD", "model": "value1", "size": "320" }, { "dep": "First Top", "name": "SECOND CHILD", "model": "value2", "size": "320" }, { "dep": "First Top", "name": "SECOND CHILD", "model": "value3", "size": "320" }, { "dep": "First Top", "name": "SECOND CHILD", "model": "value4", "size": "320" } ] }, { "name": "Second Top", "children": [ { "name": "First Child", "children": [ { "name": "value1", "size": "320" } ] }, { "dep": "Second Top", "name": "First Child", "model": "value2", "size": "320" }, { "dep": "Second Top", "name": "First Child", "model": "value3", "size": "320" }, { "dep": "Second Top", "name": "First Child", "model": "value4", "size": "320" }, { "dep": "Second Top", "name": "SECOND CHILD", "model": "value1", "size": "320" }, { "dep": "Second Top", "name": "SECOND CHILD", "model": "value2", "size": "320" }, { "dep": "Second Top", "name": "SECOND CHILD", "model": "value3", "size": "320" }, { "dep": "Second Top", "name": "SECOND CHILD", "model": "value4", "size": "320" } ] }, { "name": "Third Top", "children": [ { "name": "First Child", "children": [ { "name": "value2", "size": "320" } ] }, { "dep": "Third Top", "name": "First Child", "model": "value3", "size": "320" }, { "dep": "Third Top", "name": "First Child", "model": "value4", "size": "320" }, { "dep": "Third Top", "name": "First Child", "model": "value5", "size": "320" }, { "dep": "Third Top", "name": "Second Child", "model": "value1", "size": "320" }, { "dep": "Third Top", "name": "Second Child", "model": "value2", "size": "320" }, { "dep": "Third Top", "name": "Second Child", "model": "value3", "size": "320" }, { "dep": "Third Top", "name": "Second Child", "model": "value4", "size": "320" } ] } ] }

Desired Output Format:

{ "name": "root", "children": [ { "name": "First Top", "children": [ { "name": "First child", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] }, { "name": "Second child", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] }, ] }, { "name": "Second Top", "children": [ { "name": "First child", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] }, { "name": "Second child", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] }, ] }, { "name": "Third Top", "children": [ { "name": "First child", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] }, { "name": "Second child", "children": [ { "name": "value1", "size": "320" }, { "name": "value2", "size": "320" }, { "name": "value3", "size": "320" }, { "name": "value4", "size": "320" } ] }, ] } ] }

I'm cracking my head from a week but i alone couldn't figure it out. Someone please amend the function to get the data in the hierarchical format as i've updated.

Thanks in advance!!

解决方案

Updated to use a recursive method

This should work for n levels rather than just 2 or 3. You just need to specify which properties define which levels.

var data = [ { "dep": "First Top", "name": "First child", "model": "value1", "size": "320" }, { "dep": "First Top", "name": "First child", "model": "value2", "size": "320" }, { "dep": "First Top", "name": "SECOND CHILD", "model": "value1", "size": "320" }, { "dep": "Second Top", "name": "First Child", "model": "value1", "size": "320" } ]; var newData = { name :"root", children : [] }, levels = ["dep","name"]; // For each data row, loop through the expected levels traversing the output tree data.forEach(function(d){ // Keep this as a reference to the current level var depthCursor = newData.children; // Go down one level at a time levels.forEach(function( property, depth ){ // Look to see if a branch has already been created var index; depthCursor.forEach(function(child,i){ if ( d[property] == child.name ) index = i; }); // Add a branch if it isn't there if ( isNaN(index) ) { depthCursor.push({ name : d[property], children : []}); index = depthCursor.length - 1; } // Now reference the new child array as we go deeper into the tree depthCursor = depthCursor[index].children; // This is a leaf, so add the last element to the specified branch if ( depth === levels.length - 1 ) depthCursor.push({ name : d.model, size : d.size }); }); });

更多推荐

将平面 JSON 文件转换为分层 json 数据,如flare.json [d3 示例文件]

本文发布于:2023-11-30 03:40:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1648600.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件   示例   转换为   平面   数据

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!