将一个JSON结构转换为另一个

时间:2018-05-08 09:10:38

标签: javascript json underscore.js lodash

我在尝试将当前JSON结构转换为另一个时遇到问题:

var data = [
    {"province":"PROVINCEA","city":"CITYA","shopName":"shop name1","address":"shop address1","tel":"phone number1"},
    {"province":"PROVINCEA","city":"CITYA","shopName":"shop name2","address":"shop address2","tel":"phone number2"},
    {"province":"PROVINCEA","city":"CITYB","shopName":"shop name3","address":"shop address3","tel":"phone number3"},
    {"province":"PROVINCEA","city":"CITYB","shopName":"shop name4","address":"shop address4","tel":"phone number4"},
    {"province":"PROVINCEB","city":"CITYC","shopName":"shop name5","address":"shop address5","tel":"phone number5"},
    {"province":"PROVINCEB","city":"CITYC","shopName":"shop name6","address":"shop address6","tel":"phone number6"},
    {"province":"PROVINCEB","city":"CITYD","shopName":"shop name7","address":"shop address7","tel":"phone number7"},
    {"province":"PROVINCEB","city":"CITYD","shopName":"shop name8","address":"shop address8","tel":"phone number8"},
    ]

我希望将数据转换为这样的输出结构。

这是我想要实现的结果的片段。

var output = {
    "PROVINCEA": {
        "CITYA": {
            "shop name1":{
                "shop address1": ["phone number1"]
            },
            "shop name2":{
                "shop address2": ["phone number2"]
            },
        },
        "CITYB": {
            "shop name3":{
                "shop address3": ["phone number3"]
            },
            "shop name4":{
                "shop address4": ["phone number4"]
            },
        }
    },

    "PROVINCEB": {
        "CITYC": {
            "shop name5":{
                "shop address1": ["phone number5"]
            },
            "shop name6":{
                "shop address2": ["phone number6"]
            },
        },
        "CITYD": {
            "shop name7":{
                "shop address7": ["phone number7"]
            },
            "shop name8":{
                "shop address8": ["phone number8"]
            },
        }
    }

}

有人可以帮我解决这个问题吗?我试了几个小时。 使用lodash或下划线或普通JS是可以的。

1 个答案:

答案 0 :(得分:0)

在我的头顶,你可以做这样的事情:

    let b = _.groupBy(data, 'province');
_.keys(b).forEach((x, index) => {
  b[x] = _.groupBy(b[x], 'city');
});

_.keys(b).forEach((x, index) => {
  _.keys(b[x]).forEach((y, index) => {
   b[x][y] = _.groupBy(b[x][y], 'shopName');
   Object.keys(b[x][y]).forEach(z => {
     let temp = JSON.parse(JSON.stringify(b[x][y][z][0]));
     b[x][y][z] = {};
     b[x][y][z][temp.address] =  temp.tel;
   });
  });
});
相关问题