将 JSON 规范化为自定义模式

我有一组具有以下格式的对象


var arr = [

    {

        "productId": "123456",

        "productName": "Test Product 1",

        "description": [

            "This is delicious",

            "Suitable for vegetarian"

        ],

        "attributes": {

            "internalId": "091283"

            "category": "Dairy"

        },

        "order": 1

    }

];

我正在尝试映射到类似下面的内容


[

    [{

        {

            "name": "productId",

            "value": "123456"

        },

        {

            "name": "productName",

            "value": "Test Product 1"

        },

        {

            "name": "description",

            "value": ["This is delicious", "Suitable for vegetarian"]

        },

        {

            "name": "attributes",

            "value": {

                {

                    "name": "internalId",

                    "value": "091283"

                },

                {

                    "name": "category",

                    "value": "Dairy"

                }

            }

        },

        {

            "name": "order",

            "value": 1

        }

    }]

]

在继续之前,我尝试映射简单的属性,但现在坚持只获取循环中每个对象的最后一个属性。

http://img4.mukewang.com/63f86d120001442604400325.jpg

假设我不知道传入数据的格式是什么以及如何将 JSON 对象规范化为我想要的格式?


normalizeJson = (array) => {

        for(i = 0; i < array.length; i++){

            normalizedJson[i] = {};

            Object.keys(array[i]).forEach(key => {

                if (array[i][key] && typeof array[i][key] === "object") {

                    // normalizeJson(obj[key]);

                    // console.log(key + ' is object');

                    return;

                } else {

                    o = {};

                    o["name"] = key;

                    o["value"] = array[i][key];

                    normalizedJson[i] = o;

                    // normalizedJson[i]["name"] = key;

                    // normalizedJson[i].value = array[i][key];

                    // console.log(key);

                    return;

                }

            });

        }


          console.log(normalizedJson);

    };


或者有没有我可以使用的图书馆来实现这个目标?


牛魔王的故事
浏览 66回答 1
1回答

拉风的咖菲猫

尝试这个var obj = [&nbsp; {&nbsp; &nbsp; productId: "123456",&nbsp; &nbsp; productName: "Test Product 1",&nbsp; &nbsp; description: ["This is delicious", "Suitable for vegetarian"],&nbsp; &nbsp; attributes: {&nbsp; &nbsp; &nbsp; internalId: "091283",&nbsp; &nbsp; &nbsp; category: "Dairy",&nbsp; &nbsp; },&nbsp; &nbsp; order: 1,&nbsp; },];function normalizeObject(obj) {&nbsp; var result = [];&nbsp; if (Array.isArray(obj)) {&nbsp; &nbsp; for (let i of obj) {&nbsp; &nbsp; &nbsp; result.push(normalizeObject(i));&nbsp; &nbsp; }&nbsp; } else if (typeof obj == "object") {&nbsp; &nbsp; for (let i of Object.keys(obj)) {&nbsp; &nbsp; &nbsp; result.push({ name: i, value: normalizeObject(obj[i]) });&nbsp; &nbsp; }&nbsp; } else {&nbsp; &nbsp; return obj;&nbsp; }&nbsp; return result;}console.log(JSON.stringify(normalizeObject(obj), null, 2));这种循环方法称为递归。这是通过调用函数本身来循环的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript