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

Javascript 需要JSON文件时JSON输入意外结束,javascript,express,ecmascript-6,Javascript,Express,Ecmascript 6,使用fs.writeFile时,我创建了一个JSON文件,如下所示: [{"schoolname":"Scottsdale","StudentFirst":"john","StudentLast":"smith","grade":"2","email":"john@smith.com","ParentLast":"Smith","ParentFirst":"John"}] 除非在我需要同一个文件时,我立即得到错误: Unexpected end in JSON input 我以前也做过同样的

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

[{"schoolname":"Scottsdale","StudentFirst":"john","StudentLast":"smith","grade":"2","email":"john@smith.com","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,这样我就可以得到文件的副本并遍历它

该错误是由于需要空JSON文件而导致的。JSON文件为空,因为
fs.writeFile
是异步的,并且您未正确使用
wait

  • 您需要在异步函数中使用
    wait
  • 您只能使用带有承诺的
    wait
    ,而不能使用回调
  • 选项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`)
    })();
    

    听起来你应该验证JSON。你不能等待基于回调的函数。谢谢你,这很有意义!