需要 JSON 文件时 JSON 输入意外结束

问题描述 投票:0回答:2

使用 fs.writeFile 时,我创建一个如下所示的 JSON 文件:

[{"schoolname":"Scottsdale","StudentFirst":"john","StudentLast":"smith","grade":"2","email":"[email protected]","ParentLast":"Smith","ParentFirst":"John"}]

除非当我需要相同的文件时,我收到错误:

Unexpected end in JSON input

我之前也做过同样的事情,但使用更大的数据,它似乎工作得很好。

await fs.writeFile(`./${fileName}.json`, 
JSON.stringify(result.recordsets[0]), function(err) {
     if(err) {
           return console.log(err)
     }
})
const file = require(`./${fileName}.json`)

预期结果应返回上面的 JSON,以便我可以获得该文件的副本并迭代它。

javascript express ecmascript-6
2个回答
3
投票

该错误是由于需要空 JSON 文件而导致的。 JSON 文件为空,因为

fs.writeFile
是异步的,并且您不正确地使用了
await

  1. 您需要在异步函数中使用
    await
  2. 您只能将
    await
    与 Promise 一起使用,而不能与回调一起使用

选项 1:使用

fs.writeFileSync

fs.writeFileSync(
  `./${fileName}.json`, 
  JSON.stringify(result.recordsets[0])
)
const file = require(`./${fileName}.json`)

选项 2:将

fs.writeFile
包裹在承诺中

(async () => {
  await new Promise((resolve, reject) => {
    fs.writeFile(
      `./${fileName}.json`, 
      JSON.stringify(result.recordsets[0]),
      function(err) {
        if (err) {
          reject()
          return console.log(err)
        }
        resolve()
      }
    )
  });
  const file = require(`./${fileName}.json`)
})();

0
投票

怎么样

import fsPromises from 'fs/promises';
import path from 'path';

export async function setLocalData(locale: string, path: string, data: any) {
  if (path)
    try {
      const readJsonData = JSON.parse(
        await fsPromises.readFile(filePath, 'utf8'),
      );
      readJsonData[locale + path] = data;
      const writejsonData = JSON.stringify(readJsonData);
      await fsPromises.writeFile(filePath, writejsonData);
    } catch (err) {
      console.error(`Error writing file: ${err}`);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.