Неожиданный конец ввода JSON при попытке выполнить post-запрос axios

#javascript #axios #http-post

#javascript #axios #http-post

Вопрос:

Я получаю эту ошибку —

 "SyntaxError: C:UserstsDesktopreact projectstasksservercards.json: Unexpected end of JSON input"
 

Я видел много решений этой ошибки, но не смог найти решение.
Я получаю эту ошибку, когда пытаюсь добавить новый объект в файл JSON, содержащий массив объектов JSON.

пример к файлу JSON-

     [{"number":12,
      "color":"blue"},
     {"number":10,
      "color":"red"}
    }]
 

Пример карты, собирающейся записать в файл-

     {
    "number":10,
    "color":"blue"
    }
 

Запрос клиента-

     const cloneTicket = (ticket: Ticket) => {    
        axios.post(APIRoot '/clone/card', card).then((response) => {
            console.log(response);
        }, (error) => {
            console.log(error.response.data);
        });
    }
 

Сервер —

     app.post(APIPath   '/clone/card', (req, res) => {
      const cards = fs.readFileSync('cards.json');
      let cards_json = JSON.parse(cards)
      
      cards_json.push(req.body)
    
      const new_jsons = JSON.stringify(cards_json,null,2)
    
      fs.writeFileSync('cards.json', new_jsons, (res:any)=>{
        console.log(res)
      })
      res.send(new_jsons)
    })
 

файл cards.json-

 [
    {
        "number": 12,
        "color": "blue"
    },
    {
        "number": 10,
        "color": "red"
    }

]
 

И ошибка, вызванная servercards.json .

Комментарии:

1. Этот пример не является допустимым JSON. (Редактировать: теперь это так)

2. пожалуйста, проверьте примеры json opensource.adobe.com/Spry/samples/data_region /…

3. @MetByrdy Я не понимаю, в этих примерах не используется допустимый JSON?

4. Одинарные кавычки в json на самом деле недопустимы, и вы забываете один в конце красного 🙂

5. @tsilver Теперь, когда примеры JSON верны, вы все еще получаете ту же ошибку?

Ответ №1:

Я думаю, что нашел исправление, измените эту строку:

const cards = fs.readFileSync('cards.json');

Для

const cards = fs.readFileSync('cards.json', 'utf8');

Если вы не укажете тип кодировки readFileSync , он вернет буфер вместо содержимого файла. В этом случае буфер не сможет быть JSON.parse() отредактирован правильно.

Документы: https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options

Комментарии:

1. Тогда ошибка может быть не в вашем примере JSON-файла. Какую ошибку вы получаете?

2. Я добавил обновленный файл JSON в исходное сообщение с вопросом

3. Что cards в нем есть? Можете ли вы создать консоль. войдите в систему и поделитесь результатами, пожалуйста? Непосредственно из консоли

4. карты = <Буфер 5b 7b 0d 0a 20 20 20 20 22 6e 75 6d 62 65 72 22 3a 31 32 2c 0d 0a 20 20 20 20 22 63 6f 6c 6f 72 22 22 3a 22 72 65 64 22 0d 0a 7d 2c 0d 0a 7b 0d 0a 20 20 … еще 40 байт> cards_json= [ { число: 12, цвет: ‘red’ }, { число: 10, цвет: ‘blue’ } ]

5. Обратите внимание на одинарную кавычку для red и blue