Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dataset to JSON tree by merging

Say I have the below Dataset.

╔═════════════╦═══════════════╦═══════╗
║  Category   ║     Item      ║ Color ║
╠═════════════╬═══════════════╬═══════╣
║ Electronics ║ Mobile        ║ Black ║
║ Electronics ║ Mobile        ║ Green ║
║ Electronics ║ Laptop        ║ Black ║
║ HomeNeeds   ║ VaccumCleaner ║ white ║
║ HomeNeeds   ║ Refrigerator  ║ Red   ║
║ Wearable    ║ AppleWatch    ║ Red   ║
╚═════════════╩═══════════════╩═══════╝

I want to transform this into SOMETHING like below JSON format so that I can load into a treeview control. What will be the best way to do that? The main difference is merging the same category or items! I can parse node to node in C#, check it with the previous node, merge it if it is same! and create it manually, but is there any other alternative instead of this long and complex process?

{
    "Categories" : [
        {"Electronics" : [
                {"Mobile" : [
                    {"color":"Black"},
                    {"color":"Green"}
                    ]},
                {"Laptop":[
                    {"color":"Black"}
                    ]}
            ]},
        {"HomeNeeds":[
            {"VaccumCleaner": [
                    {"color":"white"}
                ]},
            {"Refrigerator":[
                {"color": "Red"}
                ]}
            ]},
        {"Wearable":[
            {"Applewatch":[
                {"color":"Red"}
                ]}
            ]}
        ]
    }
like image 234
Robert Avatar asked Apr 18 '15 06:04

Robert


1 Answers

Use an array.

var products = new Array(); // using new Array() to avoid mess

   products = 
    [
        [ // Home Needs
            [
                "Refrigerator",
                "red",
                "$500",
            ],
            [
                "VacuumCleaner",
                "white",
                "$50",
            ]
        ],
        [ // Wearable
            [
                "Applewatch",
                "Red",
                "$14, 000",
            ],
        ],
    ]

Here is an example on how you would use this.

function getInfoOn(category,nameofappliance) { // 0 for category is home needs, etc
    for (var i=0; i < products[category].length; i++) {
        for(var l=0; l < products[i].length; l++) {
            for (var b=0; b < i[category][l].length; b++) {
                console.log('Name: '+ i[category][l][0]);
                console.log('Price: '+i[category][l][2]);
            }
        }
    }
}

Please note the above code is only for an example. It should function all right but I might have made a mistake while writing it. This was just to show my point.

like image 168
Joseph Avatar answered Oct 20 '22 00:10

Joseph