使用 node.js 意外的令牌输出 JSON 文件


const targetFolder = './app/images/';
const fs = require('fs');
const jsonfile = require('jsonfile');
let json = [];
fs.readdir(targetFolder , (err, files) => {
  files.forEach(file => {
    json.push({file.split('.')[0]})
  });
})
jsonfile.writeFile(targetFolder , json);

当json.push在这里不起作用时,这很奇怪。当我做控制台喜欢

console.log(file.split('.')[0]) I can see the list of files in my terminal.

您收到意外的令牌错误,因为存在意外的令牌:

json.push({file.split('.')[0]})
// Here -------^

对象初始值设定项由键/值对组成。在 ES2015+ 中,如果我们从变量中获取值,我们可以只包含该变量,并且将从变量名称推断出键,但你不能使用任何任意表达式来做到这一点。

因此,例如,如果您希望对象的键foo

json.push({foo: file.split('.')[0]});

或者,如果您根本不想要对象,只需要值,请删除{}

json.push(file.split('.')[0]);

修复json.push调用后,下一个问题是,在进行writeFile调用之前不会对json.push进行调用,因为readdir异步调用其回调。更多:fs.readdir如何从异步调用返回响应?

更改此设置

json.push({file.split('.')[0]}) 

json.push({'fileName': file.split('.')[0]})

您正在使用异步代码作为同步代码。在你 你的文件是在执行 readdir 之前写入的。

正确的方法如下。

const targetFolder = './app/images/';
const fs = require('fs');
const jsonfile = require('jsonfile');
let json = [];
fs.readdir(targetFolder , (err, files) => {
  files.forEach(file => {
    json.push({'fileName': file.split('.')[0]})
  });
  jsonfile.writeFile(targetFolder , json);
})

或者,如果您想同步,请执行以下操作

const targetFolder = './app/images/';
const fs = require('fs');
const jsonfile = require('jsonfile');
let json = [];
let files = fs.readdirSync(targetFolder);
files.forEach(file => {
    json.push({'fileName': file.split('.')[0]})
});
jsonfile.writeFile(targetFolder ,json);

最新更新