如何将一个JSON行映射到分层JSON?

3

我现在遇到了令我困扰的问题,它伤害了我的心灵, 我想要将[01] JSON 转换成 [02]。

[01] JSON :

{locations: [
    {
        country: "Australia",
        area: "NSW",
        city: "Gordon"
    },
    {
        country: "Australia",
        area: "NSW",
        city: "Chatswood"
    }
]};

[02] JSON :

{countries: [
    {
        name: "Australia",
        areas: [
            {
                 name: "NSW",
                 cities: [
                      {
                           name: "Gordon"
                      },
                      {
                           name: "Chatswood"
                      }
                 ]
            }
        ]
    } 
]}

我还没有遇到过一个能够帮助你按照你所需的方式改变数据结构的库。你可能需要手动完成(GSON可以大大地帮助你)。 - OCB
3
这与解析无关,而是将一种数据结构重新映射到另一种结构。 - Olaf Dietsche
@JosephtheDreamer 我尝试着编写了逻辑来回答这个问题, 并且以奇怪的方式解决了这个问题。 我编写的代码无法满足重复使用的要求。 因此,我希望找到更简洁、更优雅的方法来处理。 - Scalalang2
在 JSON 中没有任何东西可以与 XML 中的样式表(XSLT)相媲美。 - raygozag
你有没有考虑过使用Underscore.JS中的集合函数,特别是groupBy函数? - Stoive
1个回答

1

由于您将进行大量查找,建议使用对象集合而不是最终结构中的数组。然后,您可以将其转换为最终结构或修改代码以按原样使用它。

var countries = {};
for (var i=0, loc; loc = locations[i]; i++) {
    if (!countries[loc.country]) countries[loc.country] = {};
    if (!countries[loc.country][loc.area]) countries[loc.country][loc.area] = [];
    countries[loc.country][loc.area].push(loc.city);
}
alert(JSON.stringify(countries));

哇!我不知道为什么我没有想到这个主意。谢谢你,詹姆斯。现在我很高兴解决了这个问题,我想我今天可以回家了。 - Scalalang2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接