Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将一个JSON行重新映射到层次JSON?_Javascript_Json - Fatal编程技术网

Javascript 如何将一个JSON行重新映射到层次JSON?

Javascript 如何将一个JSON行重新映射到层次JSON?,javascript,json,Javascript,Json,我现在遇到了一个让我心痛的难题, 我想将[01]JSON转换为[02] [01]JSON: {locations: [ { country: "Australia", area: "NSW", city: "Gordon" }, { country: "Australia", area: "NSW", city: "Chatswood" } ]}; [02]JSON:

我现在遇到了一个让我心痛的难题, 我想将[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"
                      }
                 ]
            }
        ]
    } 
]}

因为您将要进行一系列查找,所以我建议使用对象集合,而不是数组的最终结构。然后,您可以将其转换为最终结构,或者修改代码以按原样使用它

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));

我还没有遇到一个库可以帮助您按照所需的方式更改数据结构。您可能需要手工操作(GSON可能会有很大帮助)。这与解析无关,而是将一个数据结构重新映射到另一个数据结构。@JosephDreamer我尝试编写逻辑代码来回答这个问题,但我奇怪地解决了这个问题。我所编写的代码不能用于需求。所以我想要更简洁优雅的方式。json中没有任何东西可以与xml中的样式表(xslt)相媲美。您有没有考虑过收集函数,特别是在?哇!中的
groupBy
!,我不知道为什么我没有想到这个主意。谢谢你,詹姆斯。我现在很高兴解决了这个问题,我想,今天我可以回家了