gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:35:19 26 4
gpt4 key购买 nike

经过一番麻烦的斗争,我几乎想出了如何将平面 json 文件转换为分层文件。这个函数不是我自己写的。我从下面的帖子中复制了它。

D3 JSON DATA CONVERSION

但现在的问题是,帖子中编写的函数只有两级层次结构。但我正在寻找 4 级层次结构。我尝试重写失败的函数,但是。

用我正在尝试的代码进行编码。

             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, '  '));        

当前代码的输出

    {      "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"            }          ]        }      ]    }

所需的输出格式:

    {      "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"                }              ]            },          ]        }      ]    }

我已经一周了,但我一个人无法弄清楚。有人请修改函数以获取我更新的分层格式的数据。

提前致谢!!

最佳答案

更新为使用递归方法

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

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 });
});
});

关于javascript - 将平面 JSON 文件转换为分层 json 数据,如flare.json [d3 示例文件],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19317115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com