Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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 fs.WriteFile()返回NULL,不写入JSON文件_Javascript_Node.js_Arrays_Json - Fatal编程技术网

Javascript fs.WriteFile()返回NULL,不写入JSON文件

Javascript fs.WriteFile()返回NULL,不写入JSON文件,javascript,node.js,arrays,json,Javascript,Node.js,Arrays,Json,我有一个Javascript文件,它将数据写入我的“sequence.json”文件。但是,我的控制台中不断返回NULL的重复。然后,当我查看我的“sequence.json”文件时,它会更新,但会更新到“\“I\”:99“或根据inputNum最后一次迭代的数字。JSON文件看起来也不像JSON,它应该像这样的对象数组: [{“i”:1,“addedSum”:2},{“i”:2,“addedSum”:4}] 这是我的代码。它可能有很多错误,这是我第一次尝试这样的东西,所以道歉,如果它有点混乱

我有一个Javascript文件,它将数据写入我的“sequence.json”文件。但是,我的控制台中不断返回NULL的重复。然后,当我查看我的“sequence.json”文件时,它会更新,但会更新到
“\“I\”:99“
或根据
inputNum
最后一次迭代的数字。JSON文件看起来也不像JSON,它应该像这样的对象数组:

[{“i”:1,“addedSum”:2},{“i”:2,“addedSum”:4}]

这是我的代码。它可能有很多错误,这是我第一次尝试这样的东西,所以道歉,如果它有点混乱

必需的fs和使用的readFileSync():

var fs = require("fs");
const data = fs.readFileSync("sequence.json");
var numberCount = JSON.parse(data);
let numberObj = JSON.stringify(numberCount);

let inputNum = 100;
InitCount()。相反,它返回的迭代次数为NULL,而我的sequence.JSON文件仅包含:
“\“i\”:99“

更新:代码返回错误无法读取未定义的属性“readFile”

const fs = require("fs");

let inputNum = 200;

async function readSequenceJSON() {
  let data = await fs.promises.readFile("numberLine.json");
  return JSON.parse(data);
}

function writeSequenceJSON(data) {
  let str = JSON.stringify(data);
  return fs.promises.writefile("numberLine.json", str);
}

async function nextSequence(inputNum) {
  let data = await readSequenceJSON();

  for (let i = 0; i <= inputNum; i++) {
    const addedSum = i + i; 
    // only push numbers whose frequencies are "in bounds" of num
    if (frequency <= inputNum) {
      data.push({ i, addedSum });
    }
  }

  function addValues(data, inputNum) {
    for (
      let i = data.length ? data[data.length - 1].i + 1 : 0;
      i <= inputNum;
      i++
    ) {
      const addedSum = i + i;
      data.push({ i, addedSum });
    }
  }

const fs=require(“fs”);
设inputNum=200;
异步函数readSequenceJSON(){
让data=wait fs.promises.readFile(“numberLine.json”);
返回JSON.parse(数据);
}
函数writeSequenceJSON(数据){
让str=JSON.stringify(数据);
返回fs.promises.writefile(“numberLine.json”,str);
}
异步函数nextSequence(inputNum){
让data=wait readSequenceJSON();

for(设i=0;i您的
for
循环试图启动一系列
fs.writeFile()
操作,以便它们都试图同时写入文件。这显然会导致问题和冲突。调用
fs.writeFile()并没有真正意义
在循环中对同一个文件反复执行,因为每次新写入都会覆盖以前写入的内容,即使您一次对它们进行一次排序也是如此

此外,您将两个字符串传递给
JSON.stringify()
,其中第二个字符串将被解释为一个替换器,该替换器应该是一个函数或数组,但您传递的是一个字符串。因此,这也没有意义

然后,您似乎永远递归地调用
addCount()
,这也没有意义

老实说,我不能确切地告诉你,你想用你的sequence.json文件完成什么,所以我将提供一个小教程,介绍如何为这个序列编写一个新的项目

假设您有一个
sequence.json
,它最初包含:

[{"i":1,"addedSum":2}]
并且,您希望在该数组中找到最后一个
i
addedSum
值,并在序列中创建下一项。为此,您需要执行以下步骤:

  • 读入现有的JSON
  • 将其解析为Javascript对象
  • 将其用作Javascript,获取数组中的最后一项,并查看
    i
    addedSum
  • 创建要添加到数组末尾的新对象,并将其添加到数组中
  • 将修改后的数组转换为JSON并写入文件
  • 代码如下:

    async function readSequenceJSON() {
         let data = await fs.promises.readFile('sequence.json');
         return JSON.parse(data);
    }
    
    function writeSequenceJSON(data) {
         let str = JSON.stringify(data);
         return fs.promises.writeFile('sequence.json', str);
    }
    
    async function nextSequence(input) {
          let data = await readSequenceJSON();
    
          // do some processing of data here to possibly add a new item
          // insert your code here, data is a Javascript object (no JSON)
          // data[data.length - 1] references the last object in the array
          // if that is key to your processing
    
          return writeSequenceJSON(data);
    }
    
    // how to call it
    nextSequence(someInput).then(() => {
        console.log("all done");
    }).catch(err => {
        console.log(err);
    });
    

    我正在尝试实现上面的解决方案代码,如何将项目推送到JSON?我已经习惯了.push()等javascript数组方法,因此我不确定如何使用此方法。谢谢!@KingMuze-在
    nextSequence()
    的内部,在
    readSequence()之后
    line of code,
    data
    只是一个数组,因此您只需执行
    data.push(…)
    。我在控制台中尝试推送数据时收到此错误。TypeError:find non callable@@iterator at nextSequence(/Users/javontaymcelroy/Documents/initCount.js:21:12)这是这一行代码:for(设i=0;我通过将添加的str转换为push解决了这个问题。但现在得到的错误是:TypeError:object不可编辑(无法读取属性Symbol(Symbol.iterator))@KingMuze-正确的拼写是
    fs.promises.writeFile
    。这是我回答中的一个拼写错误(我已经更正)。
    [{"i":1,"addedSum":2}]
    
    async function readSequenceJSON() {
         let data = await fs.promises.readFile('sequence.json');
         return JSON.parse(data);
    }
    
    function writeSequenceJSON(data) {
         let str = JSON.stringify(data);
         return fs.promises.writeFile('sequence.json', str);
    }
    
    async function nextSequence(input) {
          let data = await readSequenceJSON();
    
          // do some processing of data here to possibly add a new item
          // insert your code here, data is a Javascript object (no JSON)
          // data[data.length - 1] references the last object in the array
          // if that is key to your processing
    
          return writeSequenceJSON(data);
    }
    
    // how to call it
    nextSequence(someInput).then(() => {
        console.log("all done");
    }).catch(err => {
        console.log(err);
    });