将其元素与另一个json文件进行比较后,如何更改json文件的值?

时间:2018-12-27 07:30:33

标签: javascript node.js json

我有两个名为one.json和two.json的json文件,如果one.json的任何ProjectId的值与two.json的ID匹配,则one.json具有多个projectId,two.json的completedCount应该更改为匹配ID的complete.one.json ... 我不知道如何使用JavaScript来读取或写入JSON文件,因为我是JavaScript的新手,因此对此的任何帮助也将受到赞赏 我已经尝试过使用数组。

one.json如下

[ { projectId: '230',
    title: 'Nikhil',
    status: 'Nikhil',
    seenCount: 0,
    inProgressCount: 0,
    completedCount: 30 },
  { projectId: 434,
    title: null,
    status: null,
    seenCount: 0,
    inProgressCount: 0,
    completedCount: 1 } ]

two.json如下

[ { id: '434',
    name: 'project-qa-test',
    customQuestion: 'What did you get done today?',
    maxSyncItems: null,
    orderIndex: 0,
    hidden: false,
    dones: [],
    unReported: 0,
    seenCount: 0,
    inProgressCount: 0,
    completedCount: 0 } ]

需要在two.json中更新completedCount的值,并使用javaScript打印它...

2 个答案:

答案 0 :(得分:2)

下面的代码应该可以解决您的读取,逻辑和写入文件问题。

'use strict';

const fs = require('fs');

let rawdata_one = fs.readFileSync('one.json');
let rawdata_two = fs.readFileSync('two.json');  
let onedata = JSON.parse(rawdata_one);
let twodata = JSON.parse(rawdata_two);

onedata.forEach(
    function(obj){
        let ob = twodata.findIndex( o => o.id == obj.projectId );
            if(ob != -1){
                twodata[ob].completedCount = obj.completedCount;                    
            }
     }
 )

 let data = JSON.stringify(twodata);  
 fs.writeFileSync('two.json', data);

此写入操作将使用更新的数据覆盖您的two.json。

您还可以使用require('one.json')读取json文件。但是,在整个代码中只能执行一次。

答案 1 :(得分:1)

以上回答略有改善:

  one.forEach((obj) => { 
      let ob = two.find( o => o.id == obj.projectId );
      if(ob) { ob.completedCount = obj.completedCount };  
      console.log(ob); 
  })