为了账号安全,请及时绑定邮箱和手机立即绑定

节点:无法通过 API 解析 JSON

节点:无法通过 API 解析 JSON

汪汪一只猫 2022-06-16 10:23:51
我从文件中加载 JSON 作为字符串,尝试将其解析回 JSON 并作为响应发送:router.get('/todos', (req,res) =>{    let todos = fs.readFile('todos.json', 'utf8',(err, data) =>{        if (err) throw err        res.send(JSON.parse(todos))     })})我的 todos.json 文件:{    "todos": [        {            "id": 1,            "text": "task number 1",            "priority": 3,            "done": false        },        {            "id": 2,            "text": "task number 2",            "priority": 3,            "done": false        },        {            "id": 3,            "text": "task number 3",            "priority": 3,            "done": false        },        {            "id": 4,            "text": "task number 4",            "priority": 3,            "done": false        },        {            "id": 5,            "text": "task number 5",            "priority": 3,            "done": false        }    ]}但是我收到此错误:未定义 ^SyntaxError:在 fs.readFile (/Users/mgonline/Desktop/programs/assessment/node-todo/routes/api/v1/todo.js:11:17) 的 JSON.parse () 位置 0 处的 JSON 中的意外标记 u在 FSReqWrap.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:53:3)我不知道为什么,但是当我 console.log 从文件中获取这个字符串时,我的程序似乎通过在集合数组中的最后一个对象之后添加一个逗号来稍微改变它:{    "id": 5,    "text": "task number 5",    "priority": 3,    "done": false},据说这会引起这个错误。我应该以不同的方式重写我的 JSON 以避免冲突吗?
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

问题

您使用fs.readFile不正确。 fs.readFile将返回undefined,因为readFile是异步的。文件的内容实际上是在data您提供的回调参数中到达的。


修理

完全删除let todos =并调用fs.readFile(因为您不需要 的返回值fs.readFile)。


然后调用JSON.parse(data)而不是JSON.parse(todos)(因为那是文件内容到达的地方)。


router.get('/todos', (req,res) =>{

    let todos = fs.readFile('todos.json', 'utf8',(err, data) =>{

        if (err) throw err


        res.send(JSON.parse(todos)) 

    })

})

router.get('/todos', (req,res) =>{

    fs.readFile('todos.json', 'utf8',(err, data) =>{

        if (err) throw err


        res.send(JSON.parse(data)) 

    })

})


查看完整回答
反对 回复 2022-06-16
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

我猜,编辑器在保存时会自动添加逗号。尝试将IDE的设置更改为在保存json文件时从数组元素中删除逗号



查看完整回答
反对 回复 2022-06-16
?
慕容森

TA贡献1853条经验 获得超18个赞

您尚未todos在应用程序中定义,它未定义,因此您收到错误消息,


正如@Sebastian Kaczmarek 所纠正的那样,todos返回值是fs.readFile. 作为fs.readFile回报"undefined",你会得到错误。


使用datawhich 是脚本中包含required文件内容的参数的名称。


router.get('/todos', (req, res) => {

  fs.readFile('todos.json', 'utf8', (err, data) => {

    if (err) throw err

    res.send(JSON.parse(data));

  })

})


查看完整回答
反对 回复 2022-06-16
  • 3 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信