Javascript fs.WriteFile()返回NULL,不写入JSON文件
我有一个Javascript文件,它将数据写入我的“sequence.json”文件。但是,我的控制台中不断返回NULL的重复。然后,当我查看我的“sequence.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}] 这是我的代码。它可能有很多错误,这是我第一次尝试这样的东西,所以道歉,如果它有点混乱
“\“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);
});