一个简单的更改JSON结构问题,(是的非常简单)

发布于 2022-09-30 23:08:19 字数 840 浏览 18 评论 0

{
    name:'a',
    child:{
        name:'b',
        child:{
            name:'c',
        },
        nodes:[
        {
            name:'e'
        },{
            name:'f',
            child:{
                name:'g'
            }
        }]
    }
}

比如说我获取到了一个JSON,目前结构是这个样子的。我想让结构变成下面那种格式要怎么办呢。
更改数据格式的,看的我头痛啊

{
    name:'a',
    form:'b', // 指向child子节点的name
    child:{
        name:'b',
        form:['e','f'], // 当有nodes的时候使用数组存放node节点的name
        child:{
            name:'c',
        },
        nodes:[
        {
            name:'e',
            form:'c' // 没有指向上个 nodes 对象的子节点
        },{
            name:'f',
            from:'g', // 有子节点指向子节点
            child:{
                name:'g' // 没有指向上个 nodes 对象的子节点
                form:'c'
            }
        }]
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

想挽留 2022-10-07 23:08:20

image.png

{
var obj = {
    name:'a',
    child:{
        name:'b',
        child:{
            name:'c',
        },
        nodes:[
        {
            name:'e'
        },{
            name:'f',
            child:{
                name:'g'
            }
        }]
    }
}

var forSetTree = (obj,form='') => (obj.form = obj.nodes ? obj.nodes.map(item => forSetTree(item, obj.child.name)) : obj.child ? forSetTree(obj.child, form) : form, obj.name);
forSetTree(obj);
console.log(JSON.stringify(obj,null, '\t')) // 按tab缩进
}
VM143:23 {
    "name": "a",
    "child": {
        "name": "b",
        "child": {
            "name": "c"
        },
        "nodes": [
            {
                "name": "e",
                "form": "c"
            },
            {
                "name": "f",
                "child": {
                    "name": "g",
                    "form": "c"
                },
                "form": "g"
            }
        ],
        "form": [
            "e",
            "f"
        ]
    },
    "form": "b"
}
梦年海沫深 2022-10-07 23:08:20
function deepSetForm(node, parent=node, isNodes) {
    if(node.nodes) {
        node.form = node.nodes.map(v => (deepSetForm(v, node, true), v.name))
    } else if(node.child) {
        node.form = node.child.name;
    } else if(isNodes){
        node.form = parent.child.name
    }
    node.child &&    deepSetForm(node.child, isNodes ? parent : node, isNodes);
    return node
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文