Как преобразовать ответ NodeJs во вложенный ответ JSON

Я использую Nodejs(ExpressJS) и my-SQL для создания остальных API. Я хочу, чтобы мой ответ был похож на вложенный объект json, который будет легко читаться на моем интерфейсе. Я пробовал использовать цикл for, но он не дал мне должного результата, есть ли плагины, доступные для форматирования этого ответа, или есть какой-нибудь простой способ сделать этот вложенный ответ json.

мой sql запрос

SELECT category.id as category_id, sub_category.id as subcategory_id, product.id as product_id, 
       category.name as category_name, sub_category.name as subcategory_name, 
       product.name as product_name 
FROM product 
JOIN sub_category ON product.sub_category_id = sub_category.id 
JOIN category ON sub_category.category_id = category.id 
ORDER BY category.id;

и я получаю ответ как

[
{
"category_id": 1,
"subcategory_id": 1,
"product_id": 11,
"category_name": "category 1",
"subcategory_name": "sub category 1",
"product_name": "New Product new"
},
{
"category_id": 1,
"subcategory_id": 2,
"product_id": 3,
"category_name": "category 1",
"subcategory_name": "sub category 2",
"product_name": "product 3"
},
{
"category_id": 1,
"subcategory_id": 1,
"product_id": 1,
"category_name": "category 1",
"subcategory_name": "sub category 1",
"product_name": "product 1"
},
{
"category_id": 1,
"subcategory_id": 1,
"product_id": 2,
"category_name": "category 1",
"subcategory_name": "sub category 1",
"product_name": "product 2"
},
{
"category_id": 1,
"subcategory_id": 1,
"product_id": 4,
"category_name": "category 1",
"subcategory_name": "sub category 1",
"product_name": "New Product updated"
},
{
"category_id": 1,
"subcategory_id": 1,
"product_id": 6,
"category_name": "category 1",
"subcategory_name": "sub category 1",
"product_name": "New Product"
},
{
"category_id": 1,
"subcategory_id": 1,
"product_id": 8,
"category_name": "category 1",
"subcategory_name": "sub category 1",
"product_name": "New Product new"
},
{
"category_id": 1,
"subcategory_id": 1,
"product_id": 9,
"category_name": "category 1",
"subcategory_name": "sub category 1",
"product_name": "New Product new"
},
{
"category_id": 1,
"subcategory_id": 1,
"product_id": 10,
"category_name": "category 1",
"subcategory_name": "sub category 1",
"product_name": "New Product new"
},
{
"category_id": 2,
"subcategory_id": 3,
"product_id": 5,
"category_name": "category 2",
"subcategory_name": "sub category 3",
"product_name": "product 5"
}
]

Мне нужно как

[
    {
        "category_id" : 1,
        "category_name" : "product 1",
        "data":[
                {
                    "sub_category_id" : 1,
                    "sub_category_name" : "product 1",
                    "data":[
                        {
                            "product_id" : 1,
                            "product_name" : "product 1"  
                        },
                        {
                            "product_id" : 2,
                            "product_name" : "product 2" 
                        }
                    ]
                },
                {
                    "sub_category_id" : 2,
                    "sub_category_name" : "subcategory 2",
                    "data":[
                        {
                            "product_id" : 3,
                            "product_name" : "product 3"  
                        },
                        {
                            "product_id" : 4,
                            "product_name" : "product 4" 
                        }
                    ]    
                }
            ]
    },
    {
        "category_id" : 2 ,
        "category_name" : "category 2",
        "data":[
            {
                "sub_category_id" : 3,
                "sub_category_name" : "sub category 3",
                "data":[
                    {
                        "product_id" : 5,
                        "product_name" : "product 5"  
                    },
                    {
                        "product_id" : 6,
                        "product_name" : "product 6" 
                    }
                ]    
            }
        ]
    }
]

Есть ли плагин для этого или кто-нибудь может мне помочь с этим. Спасибо

2 ответа

Решение

Проверьте ссылку ниже, реализованную с помощью вложенного forEach, но вы также можете использовать рекурсию.

https://repl.it/@debasish_pothal/nested-json

"Python лучше, чем вложенный", согласно Python PEP20:) Люди скорее борются с противоположной задачей - они хотят преобразовать вложенные данные JSON в плоскую структуру, чтобы иметь возможность легко манипулировать данными. Normalizr - самая популярная библиотека AFAIK для этой задачи.

Если вы действительно нуждаетесь во вложении, нужно написать правильную функцию приведения, я предлагаю пойти по этому пути.

В любом случае - если вы хотите использовать стороннее ПО, это может быть полезно: https://www.npmjs.com/package/flat-to-nested

Другие вопросы по тегам