Преобразовать одну структуру JSON в другую - PullRequest
0 голосов
/ 08 мая 2018

У меня проблема при попытке преобразовать текущую структуру 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 голосов
/ 08 мая 2018

Прямо из головы, вы можете сделать что-то вроде этого:

    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;
   });
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...