2015-03-11 3 views
-3

мне нужно переформатировать JSON ниже, так что данные форматируются с иерархией уровня, она в настоящее время выглядит следующим образом:JSON вложенность лучших практики

[ 
    { 
    "level": "level 1", 
    "name": "HTML5" 
    }, 
    { 
    "level": "level 1", 
    "name": "CSS3" 
    }, 
    { 
    "level": "level 1", 
    "name": "SASS/LESS" 
    }, 
    { 
    "level": "level 1", 
    "name": "Git" 
    }, 
    { 
    "level": "level 2", 
    "name": "MySQL" 
    }, 
    { 
    "level": "level 2", 
    "name": "Server Management (using Apache/Nginx)" 
    }, 
    { 
    "level": "level 2", 
    "name": "CMS Templating (Perch, Wordpress, Symfony, Laravel)" 
    }, 
    { 
    "level": "level 2", 
    "name": "Illustration" 
    }, 
    { 
    "level": "level 3", 
    "name": "OOP PHP" 
    }, 
    { 
    "level": "level 3", 
    "name": "CMS Templating (Drupal, EpiServer, Umbraco)" 
    }, 
    { 
    "level": "level 3", 
    "name": "3d Modelling" 
    } 
] 

, но я хочу, чтобы это было более вложенными, так что каждый навык сгруппированы по уровню. Я попробовал следующее, но я не думаю, что написал его правильно, так как не могу найти хороший способ доступа к именам уровней.

[ 
    { 
     "level": { 
      "expert" : [ 
       { "name" : "HTML5" }, 
       { "name" : "CSS3" }, 
       { "name" : "SASS/LESS" }, 
       { "name" : "Git" } 
      ], 
      "middle-weight" : [ 
       { "name" : "MySQL" }, 
       { "name" : "Server Management (using Apache/Nginx)" }, 
       { "name" : "CMS Templating (Perch, Wordpress, Symfony, Laravel)" }, 
       { "name" : "Illustration" } 
      ], 
      "competent": [ 
       { "name" : "OOP PHP" }, 
       { "name" : "CMS Templating (Drupal, EpiServer, Umbraco)" }, 
       { "name" : "3d Modelling" } 
      ] 
     } 
    } 
] 

Может кто-то пожалуйста, предложите лучший способ форматирования JSON, так что имеет больше смысла.

Примечание. Чтобы быть ясным, я не прошу помощи о том, как проходить данные, я прошу помощи о наиболее оптимальном способе ее выложить. Это совсем другой способ мышления из табличных данных, с которыми я привык работать.

+0

'данные [0] .level.expert'? - А потом повторить? И в чем вопрос? – tymeJV

+0

Просто перебирайте массив и нажимайте предопределенный объект в зависимости от атрибута 'level'. – Rias

+1

Если вы хотите динамически управлять своими данными, обычно лучше иметь только массивы объектов, независимо от глубины. Например, вы можете иметь 'var level = [{name: 'expert', categories: [...]}, {name: 'компетентный', categories: [...]}, ...];'. Он также позволяет вам заказывать уровень без необходимости, например, дополнительного поля. – Blackhole

ответ

1

Более прямой способ был бы просто использовать level1, level2, level3 как свойства массива.

{ 
 
    "level1": [ 
 
    { 
 
     "name": "HTML" 
 
    }, 
 
    { 
 
     "name": "CSS3" 
 
    } 
 
    ], 
 
    "level2": [ 
 
    { 
 
     "name" : "MySQL" 
 
    } 
 
    ], 
 
    "level3": [ 
 
    { 
 
     "name": "3d Modelling" 
 
    } 
 
    ] 
 
}

Вы можете получить доступ имена с помощью level1[0].name например

Но это зависит от вашего использования, если ваши объекты уровня нуждаются в дополнительной информации, они делают это как aove, поэтому вы можете их расширить. Если вы только нуждаясь строки, вы можете также упростить его и просто использовать строки навыков непосредственно в массиве:

{ 
 
    "level1": [ 
 
    "HTML", 
 
    "CSS3" 
 
    ], 
 
    "level2": [ 
 
    "MySQL", 
 
    "Server Management (using Apache/Nginx)" 
 
    ], 
 
    "level3" : [] 
 
}

И в этом случае вы Acces навыки только с помощью level1[0] напрямую.

-1
  1. подготовить новый объект результата

    var result = { 
        level: { 
        expert: [], 
        competent: [] 
        } 
    };
  2. итеративный над массивом

    for (var i = 0, max = array.length; i < max; i += 1) {}

  3. проверки каждого объекта для значения уровня

    switch (array[i].level) { 
        case 'level 1': //... 
    }
  4. нажимные объекты в соответствии собственности, в зависимости от переключателя

    result.level.expert.push({ name: array[i].name })

  5. выходной как JSON:

    JSON.stringify(result);

+0

В вопросе о том, что ОП «не просит помощи о том, как перемещаться по данным», прямо сказано «просить о помощи по наиболее оптимальному способу ее выложить». – Blackhole

+0

извините, это, должно быть, было добавлено позже – Rias

Смежные вопросы