如何保存和读取JSON数据
我想一个亿数据保存在我的应用程序的NodeJS一个JSON文件。其主要思想是,以1000×1000的像素的网格保存为与该x,y位置和颜色ID阵列,使得每个像素具有坐标和颜色。我实际的代码来生成一个例子:
所以我有一个函数生成数据,并使用fs.writeFile()我可以将它保存。
//resetPos('test.json');
function resetPos(path) {
let data = [];
for (let y = 1; y <= 1000; y++){
data.push([]);
}
data.forEach(function(e, i){
for (let x = 1; x <= 1000; x++) {
e.push([
"x": x,
"y": i,
"color": "#cccccc"
]);
}
});
fs.writeFile(path, JSON.stringify(data), function(err){
if(err) throw err;
});
console.log(data);
}
let global_data = fs.readFileSync("test.json");
console.log(global_data[0]);
当我读了文件,显示“91”。我已经使用.toJSON()和的ToString()尝试,但没去,因为我想要的。我看做得到的x,y坐标数据[Y] [X]
回答如下:基本上,有两种方法来读取一个Node.js的文件.json
第一种选择是使用require
功能,您通常使用导入.js
文件,但你可以使用它的.json
文件以及:
const packageJson = require('./package.json');
这种方法的好处是,你拿回.json
文件作为一个JavaScript对象或数组的内容,已经被解析。这种方法的缺点是,你不能重新加载该文件在当前进程中,如果事情已经改变,因为require
任何缓存加载文件的内容,你总是给后面的缓存值。
你的第二个选择是完全相反的:它可以让你重新加载的东西,但它需要你分析你自己的文件。为此,您使用fs
模块的readFile
功能:
const fs = require('fs');
fs.readFile('./package.json', { encoding: 'utf8' }, (err, data) => {
const packageJson = JSON.parse(data);
// ...
});
如果你想使用async
和await
,如果你使用的Node.js的util.promisify
功能,你也可以这样写以同步的方式,但保留异步代码:
const fs = require('fs'),
{ promisify } = require('util');
const readFile = promisify(fs.readFile);
(async () => {
const data = await readFile('./package.json', { encoding: 'utf8' });
const packageJson = JSON.parse(data);
// ...
})();
除此之外,里面还有fs.readFileSync
功能,以同步的方式工作,但你应该从一个软件的性能的原因望而却步。
为了写一个JSON文件,你唯一的选择是使用writeFile
模块,它的工作原理基本相同,其fs
对应的readFile
功能:
const fs = require('fs');
const packageJson = { /* ... */ };
const data = JSON.parse(packageJson);
fs.writeFile('./package.json', data, { encoding: 'utf8' }, err => {
// ...
});
同样,你可以使用util.promisify
功能如上所述,使事情async
和await
工作,或者你可以使用同步fs.writeFileSync
功能(再次,我不推荐)。