【问题标题】:callback function to update multiple json files (read and write)更新多个json文件的回调函数(读写)
【发布时间】:2019-12-04 06:18:54
【问题描述】:

我有以下程序,它在一个名为 Implementations 的变量中获取一个 json,运行该函数并将 json 与原始 json 合并。

var Implementations = {


"UniversalOne": "",
  "CommonOne": "",
  "Implementations": [
    {
      "BirthDate": "",
      "UniqueTraits": "",
      "Male": {
        "Gender": "Male",
        "PlaceOfBirth": "",
        "Weight": "",
        "Height": "",
        "EyeColor": ""
      },
      "Female": {
        "Gender": "Female",
        "PlaceOfBirth": "",
        "Weight": "",
        "Height": "",
        "EyeColor": ""
      },
      "Country": [
        {
          "Orientation": "Male",
          "Name": "ABCD",
          "County": "East"
        },
        {
          "Orientation": "Male",
          "Name": "ABCD",
          "County": "West"
        },
        {
          "Orientation": "Female",
          "Name": "EFGH",
          "County": "East"
        },
        {
          "Orientation": "Female",
          "Name": "EFGH",
          "County": "West"
        },
        {
          "Orientation": "Female",
          "Name": "IJKL"
        }
      ],
      "State": [
        {
          "Address": "XYZ Street",
          "ZipCode": "US"
        }
      ],
      "Boy": [
        {
          "AgeGroup": "A",
          "Id": 1,
          "MaternalName": "",
          "PaternalName": ""
        },
        {
          "AgeGroup": "B",
          "Id": 2,
          "MaternalName": "",
          "PaternalName": ""
        },
        {
          "AgeGroup": "C",
          "Id": 3,
          "MaternalName": "",
          "PaternalName": ""
        }
      ]
    }
  ],
  "PersonalityTraits": [
    {
      "Type": "Positive"
    },
    {
      "Type": "Negative"
    }
  ],
  "UniversalTwo": "",
  "CommonTwo": "",
  "EatingHabits": {
    "Type": "Excessive"
  },
  "ReadingHabits": {
    "Type": "Fast"
  },
  "FitnessHabits": {},
  "UniversalThree": "",
  "CommonThree": ""
}




function modifyImplementations(Implementations) {
  var finalResult = [];

  for (var i = 0; i < Implementations.Implementations.length; i++) {
    var currentImplementation = Implementations.Implementations[i];
    var targetObj = {
      "Male": {
        "Gender": "Male",
        "Country": [],
        "State": currentImplementation.State
      },
      "Female": {
        "Gender": "Female",
        "Country": [],
        "State": currentImplementation.State
      }
    };

    for (var j = 0; j < currentImplementation.Country.length; j++) {
      var currentCountry = currentImplementation.Country[j];
      if (currentCountry.Orientation === 'Male') {
        targetObj.Male.Country.push(currentCountry);
      } else if (currentCountry.Orientation === 'Female') {
        targetObj.Female.Country.push(currentCountry);
      }
    }
    finalResult.push(targetObj);
  }
  return finalResult
}

var x = Object.assign({}, Implementations);
x.Implementations = modifyImplementations(Implementations);

console.log(JSON.stringify(x));

我想从名为 InputFolder 的文件夹中运行多个包含 json 的文本文件,运行相同的函数 modifyImplementations 并将更新后的文件写入另一个名为 outputfolder 的文件夹。

var fs = require('fs')
var async = require('async'), 
const path = "./InputFolder/";

fs.readdir(path, (err, files) => {
  if (err) {
      debugger;
    console.log(err);
    return;
  }
  files.forEach(file => {
    fs.readFile(path + file, 'utf8', function (err,finalResult) {
      if (err) {
          return console.log(err);
      }

    function modifyImplementations(Implementations){ 
    let finalResult = [];
    for (let c=0; c<Implementations.Implementations.length; c++) {

      var currentImplementation = Implementations.Implementations[i];
      var targetObj = {
      "Male": {
        "Gender": "Male",
        "Country": [],
        "State": currentImplementation.State
      },
      "Female": {
        "Gender": "Female",
        "Country": [],
        "State": currentImplementation.State
      }
    };



   for (var j = 0; j < currentImplementation.Country.length; j++) {
      var currentCountry = currentImplementation.Country[j];
      if (currentCountry.Orientation === 'Male') {
        targetObj.Male.Country.push(currentCountry);
      } else if (currentCountry.Orientation === 'Female') {
        targetObj.Female.Country.push(currentCountry);
      }
    }   

        finalResult.push(originalObject);
} 

        return finalResult
}

    modifyImplementations(Implementations, ()=>{
    fs.writeFile('./OutputFolder/' + file,finalResult,'utf8', function (err) { 
    if (err) { 
    return console.log(err); 
    }

});

});
  });
});



});

我收到一个错误,无法读取属性 Implementations.length,因为现在我的变量 Implementations 中没有 json。如何重构程序?

【问题讨论】:

    标签: javascript node.js json node-modules


    【解决方案1】:

    您只需要在每个 for 循环之前使用 if 语句验证对象属性是否为数组即可。

    if (obj.prop instanceOf Array) {
        for (var i = 0; i < obj.prop.length; i++) {
           // your logic here.
        }
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      相关资源
      最近更新 更多