JSON嵌套最佳实践

时间:2015-03-11 18:48:58

标签: 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的最佳方法,以便最有意义。

注意:为了清楚起见,我并没有就如何遍历数据寻求帮助,我正在寻求最佳解决方案的帮助。这是我以前使用的基于表格的数据的一种非常不同的思维方式。

2 个答案:

答案 0 :(得分:1)

更直接的方法是使用level1level2level3作为数组属性。

{
  "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" : []
}

在这种情况下,您只需直接使用level1[0]即可获取技能。

答案 1 :(得分:-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);