javascript - 如何将 .geojson 文件转换为带有嵌套数组的 JavaScript 对象?

标签 javascript jquery json geojson file-conversion

这里是新手,正在努力将数据转换为复杂的结构。我有一个非常大的 .geojson 文件,具有以下简化的数据格式:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "group_name": "AAA",
        "inst_name": "Institution1",
        "holdings": "100,000+",
        "all_titles": "500,000+",
        "region": "New York"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          -86.1762,
          39.7742
        ]
      }
    },
  {
  "type": "Feature",
  "properties": {
    "group_name": "AAA",
    "inst_name_long": "Institution2",
    "holdings": "100,000+",
    "all_titles": "500,000+",
    "region": "New York"
  },
  "geometry": {
    "type": "Point",
    "coordinates": [
      -87.4106,
      39.4705
    ]
  }
},...

如何将其转换为以下格式?

[{ 
       inst_name: "Institution1",
       properties: {group_name: "AAA", holdings: "<100,000", all_titles: "250,000+", region: "Indiana"},
       group_name: "AAA",
       group_members: ["Institute1","Institute2,...],
       region_name: "New York",
       region_members: ["Institute1","Institute2,...],
       collection_name: "100,000+",
       collection_members: ["Institute1","Institute2,...],
       shared_name: "500,000+",
       shared_members: ["Institute1","Institute2,...]
},{ 
       inst_name: "Institution2",
       properties: {group_name: "AAA", holdings: "<100,000", all_titles: "250,000+", region: "Indiana"},
       group_name: "AAA",
       group_members: ["Institute1","Institute2,...],
       region_name: "New York",
       region_members: ["Institute1","Institute2,...],
       collection_name: "100,000+",
       collection_members: ["Institute1","Institute2,...],
       shared_name: "500,000+",
       shared_members: ["Institute1","Institute2,...]
}]

我已经能够获得使用创建的对象的第一部分 inst_name:“机构2”, 属性:{}, 但我一直试图在同一个函数中构建对象的其余部分,正如这个插件中所示:https://plnkr.co/edit/340oshw78kEAOdFwZpH9?p=preview

最佳答案

当您需要处理复杂数据时,将任务分解为更小的可管理 block 。

->用简单的属性构成机构数组。

->将相似的机构分组到单独的数组中。

->根据值将机构数组映射到分组数组。

fetch('./geoJsondata.json')
    .then((res)=>res.json())
    .then(handleResponse)
    .catch((err)=>console.log(err))

function handleResponse(res) {
    let propsToGroupBy = ['region', 'all_titles', 'holdings', 'group_name']
    console.log(flattenJSON(res, propsToGroupBy));
    return flattenJSON(res, propsToGroupBy)
}


function flattenJSON(geoJSON, propsToGroupBy) {
    let { institutions, groups } =
        geoJSON.features.reduce(
            reduceGroupsAndGetLists, 
            { institutions: [], groups: {}, groupByProps: propsToGroupBy });
    let flattendJSON = institutions.map(toInstList(groups));

    function reduceGroupsAndGetLists (acc, {properties}) {
        let {
            inst_name_long: inst_name,
            group_name,
            region,
            holdings,
            all_titles
        } = properties;

        acc.institutions.push({
            properties,
            inst_name,
            group_name,
            region,
            holdings,
            all_titles
        });

        acc.groupByProps.map((prop) => {
            if (
                (acc.groups[prop] || (acc.groups[prop] = {})))
                &&
                (
                    acc.groups[prop][properties[prop]] || 
                    (acc.groups[prop][properties[prop]] = [])
                ))
                acc.groups[prop][properties[prop]].push(inst_name);
        });

        return acc;
    }

    function toInstList (groups) {
        return (institution) => {
            propsToGroupBy.map((prop) => {
                institution[`${prop}_members`] = groups[prop][institution[prop]];
            });
            return institution;
        }
    }

    return flattendJSON
}

关于javascript - 如何将 .geojson 文件转换为带有嵌套数组的 JavaScript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46009770/

相关文章:

json - 解析 JSON 并遍历 Scala 中的对象

javascript - 选择的 Angular 指令不会更新

javascript - Protractor E2E测试错误: Object [object Object] has no method 'getWindowHandle'

jquery - 如何以数组形式获取数据列表?

c# httpclient PostAsJson 发送 GET 请求而不是 POST

json - 从 JSON 文件保存和加载 TableView ?

javascript - 如何使用 knockout validation

javascript - 如何在reactjs中使用chartist的堆栈条?

jquery - 使用 jQuery 获取框架源(源更改后)

javascript - 从 jquery 到 AngularJS 动画