代码之家  ›  专栏  ›  技术社区  ›  Maryam Koulaei

为JSON对象的属性名称创建一个模型

  •  1
  • Maryam Koulaei  · 技术社区  · 6 年前

    我下载了一个JSON文件并想将其导入MongoDB,但是在将其导入数据库之前,我想在node.js中编写一个代码来重新构造JSON对象并向每个对象添加一些额外的信息。 每个对象的结构如下:

    {
      "fid": "52955",
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [
            -76.9812226935329,
            38.9032437788008
          ],
          [
            -76.9811595039813,
            38.9033432081856
          ]
        ]
      },
      "signs": [
        {
          "MANUAL_SEGID": null,
          "OBJECTID": "125463",
          "GLOBALID": "{0F7DB59B-948D-42DB-90EF-3F17D391B8BB}",
          "SIGNARROWDIRECTION": "2",
          "MUTCD": "R-DC-Loading_Zone_With_ParkMobile_Zone",
          "intervalInfo": [
            {
              "RESTRICTIONSTATUS": "3",
              "OBJECTID": "41460"
            }
          ]
        },
        {
          "MANUAL_SEGID": null,
          "OBJECTID": "125465",
          "GLOBALID": "{079902E8-D9B0-462B-9323-1550B4FE7197}",
          "SIGNARROWDIRECTION": "2",
          "MUTCD": "R-DC-2HR",
          "intervalInfo": [
            {
              "RESTRICTIONSTATUS": "1",
              "OBJECTID": "41462"
            }
          ]
        }
      ]
    }

    我为JSON属性创建模型或模式的目的是,如果稍后更改了某些名称,我可以很容易地直接应用模型中的更改,而不是在我的javascript代码中。 如果有人给我一个提示,那就太好了。 谢谢

    我的代码的一部分:

    const filesArray = [ "permitZone.geojson"]; //Array of files in manual folder
    const dataInfo = {
        description: 'Zone',
        data: [
            {
                url: 'https://opendata.arcgis.com/datasets/fcfbf29074e549d8aff9b9c708179291_1.geojson',
                type: 'permitZone.geojson'
            }
        ]
    };
    function dataReader() {
        var allResult = [];
    
        var arrayFilePromises = filesArray.map(function (fileName, index) {
            return downloadFile(dataInfo.data[index].url, dataDownloadPath, fileName)
                .then((fileRes) => {
                    fileRes.features.forEach(function (val) {
                       
                        // Here i need to read each object and apply some changes
    
                    });
                })
        })
    
        return Promise.all([Promise.all(arrayFilePromises)])
            .then(() => {
                return allResult
            })
    
    }

    嘿,我可以用下面的类编写一个objectmodel.js,但是我仍然不清楚如何使用数组的构造函数。在我的例子中,这个符号?因为val.signs是一个符号数组。

    class Sign {
        constructor(signData) {
            this.objectId = signData.OBJECTID;
            this.global = signData.GLOBALID;
            this.manualSegId = signData.MANUAL_SEGID;
            this.signarrowDirection = signData.SIGNARROWDIRECTION;
        }
    }
    class MyCity {
        constructor(val) {
            this.fid = val.fid;
            this.lineId = val.lineId;
            this.segId = val.segId;
            this.geometry = val.geometry;
            this.signs = new Sign(val.signs);
        }
    
    }
    
    
    module.exports = {
        MyCity: MyCity
    }
    1 回复  |  直到 6 年前
        1
  •  1
  •   Maryam Koulaei    6 年前

    class Sign {
        constructor(signData) {
            this.objectId = signData.OBJECTID;
            this.global = signData.GLOBALID;
            this.manualSegId = signData.MANUAL_SEGID;
            this.signarrowDirection = signData.SIGNARROWDIRECTION;
        }
    }
    
    class MyCity {
        constructor(val) {
            this.fid = val.fid;
            this.lineId = val.lineId;
            this.segId = val.segId;
            this.geometry = val.geometry;
            this.signs = val.signs.map(signData => new Sign(signData))
        }
    
    }
    
    
    module.exports = {
        MyCity: MyCity
    }