【问题标题】:create nested json from plain jsons从普通 jsons 创建嵌套 json
【发布时间】:2018-04-29 09:39:15
【问题描述】:

我需要从 node-mysql 结果(json 对象)创建一个嵌套的 json 对象,这就是我要完成的目标

这些是我拥有的 mysql json 对象:

plants: 
[{id: 1, name: 'plant 1'}, 
{id: 2, name: 'plant 2'}]

areas:
[{id: 1, nombre: 'area 1', plants_id: 1 }, 
{ id: 2, nombre: 'area 1 - plant 2', plantas_id: 2 }, 
{ id: 3, nombre: 'area n', plantas_id: 1 }]

machines:
[{id: 1, nombre: 'machine 1 - area 1', areas_id: 1 }, 
{ id: 2, nombre: 'machine 1 - area 2', areas_id: 2 },
{ id: 3, nombre: 'machine n', areas_id: 2 }]

这是我需要使用前一个 json 的值创建的 json:

{
  "plants":[
    {
      "name":"plant 1",
      "areas": [
        { "name":"area 1", 
          "machines":[ 
            {"nombre":"machine 1 - area 1"
          }] 
        },
        { "nombre":"area 2", 
          "machines":[ 
            {"nombre":"machine 1 - area 2"
          }] 
        }
      ]
    },
    {
      "name":"plant 2",
      "areas": [
        { "nombre":"area 1 - plant 2", 
          "maquinas":[ ] 
        }
      ]
    }
  ]
}

我一直在尝试使用嵌套的 for 循环,但它一团糟,我读过 linq 但我从未使用过它

抱歉英语不好。任何帮助表示赞赏

感谢和问候

【问题讨论】:

    标签: javascript jquery json node.js


    【解决方案1】:

    这不是一个有效的解决方案,但如果您的数据集很小,它可以工作。

    var plants = [
        { id: 1, name: 'plant 1' }, 
        { id: 2, name: 'plant 2' },
    ];
    
    var areas = [
        { id: 1, nombre: 'area 1', plantas_id: 1 }, // there was a spelling mistake here
        { id: 2, nombre: 'area 1 - plant 2', plantas_id: 2 }, 
        { id: 3, nombre: 'area n', plantas_id: 1 },
    ];
    
    var machines = [
        { id: 1, nombre: 'machine 1 - area 1', areas_id: 1 }, 
        { id: 2, nombre: 'machine 1 - area 2', areas_id: 2 },
        { id: 3, nombre: 'machine n', areas_id: 2 },
    ];
    
    console.time('result');
    
    function result() {
        return plants.map(function(plant) {
            return {
                "name": plant.name,
                "areas": areas.filter(function(area) {
                    return area.plantas_id == plant.id;
                }).map(function(area) {
                    return {
                        "nombre": area.nombre,
                        "machines": machines.filter(function(machine) {
                            return machine.areas_id == area.id;
                        }).map(function(machine) {
                            return { 
                                "nombre": machine.nombre,
                            };
                        }),
                    };
                }),
            };
        });
    }
    
    console.timeEnd('result');
    console.log(result());

    【讨论】:

    • 你使用的是哪种语言?,我不能在我的网站上使用 let,我在后端使用 node 和 express
    • 我使用的是 ES6,但是我已经更新了我的答案以使用 var 和普通函数。
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2016-09-02
    • 2018-12-24
    • 1970-01-01
    相关资源
    最近更新 更多