Не могу загрузить мой файл JSON: сбой HTTP во время синтаксического анализа JSON

Я пытаюсь загрузить действительный файл json, но получаю сообщение об ошибке:

stackblitz

Http failure during parsing for ... .json

Не могу загрузить мой файл JSON: сбой HTTP во время синтаксического анализа JSON

recipe.component.ts

 url = '../../files/recipes.json';
  recipes;

  constructor(private fileService: FileLoaderService) {}

  ngOnInit() {
    this.fileService.getData(this.url).subscribe(res => console.info(res));
  }

file-loader.service.ts

constructor(private http: HttpClient) { }

  getData(url: string): Observable<any> {
    return this.http.get(url);
  }

Вы не можете загружать файлы с таким относительным URL. Лучше всего поместить JSON в папку / assets / и использовать его в качестве URL-адреса.

Phix 03.10.2018 22:25

Если бы я делал это через CLI, а не на stackblitz, я бы сделал это таким же образом. Просто не знал, почему я не мог.

physicsboy 03.10.2018 22:29

Даже это не работает? url = '/assets/recipes.json';

physicsboy 03.10.2018 22:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
508
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Имея экспорт

export const recipes = [
  {...}
]

делает его недействительным json-документом. Не используйте экспорт, удалите его

Файл JSON должен быть просто файлом json.

[
  {...}
]

Ой. Забыл, что я оставил это, когда конвертировал обратно из .ts. Не должно было его спасти.

physicsboy 03.10.2018 22:31

Соедините это неправильно и отсутствует здесь:

  1. Это недопустимый файл JSON (в stackblitz). Это константа, которую вы можете просто импортировать с помощью обычного импорта машинописного текста. Если вы хотите загрузить его с помощью http, вы должны удалить export const recipes из файла

  2. Вы должны переместить папку с файлами в папку с ресурсами проекта, чтобы файл можно было загрузить с http-сервера.

Ответ принят как подходящий

У вас недействительный файл JSON. Ответ epascarello расскажет вам, как преобразовать его в действительный JSON, но другой вариант - просто импортировать данные напрямую.

  1. Измените расширение файла .json на .ts
  2. В свой компонент добавьте import {recipes} from '../../files/recipes'
  3. У вас есть данные! Не нужно возиться с http-запросами.

Сегодня я потратил некоторое время на то, чтобы рвать волосы (новичок в написании статей в StackBlitz). и даже попробовал то, что было помечено как ответ в этой теме, но безуспешно. Во всяком случае, похоже, что ключ добавляет файл .json в папку с ресурсами. Вот ссылка, который, наконец, принес мне немедленный успех. Надеюсь, что это поможет кому-то еще сохранить прическу в такт. :-)

Меня попросили добавить фрагмент кода, но на самом деле не так много, чтобы добавить, поэтому я создал пример StackBlitz, который можно просмотреть при желании. Однако в основном все сводится к следующему: в StackBlitz, когда вы загружаете локальный файл .json, вы делаете то же самое, что обычно ... за исключением того, что вы АБСОЛЮТНО помещаете этот файл .json в папку "assets" (если у тебя его нет, создай)

   this.http.get('/assets/user.json')

Я добавил пример StackBlitz здесь

пожалуйста, добавьте пример раздела для связанного кода - в противном случае этот ответ может быть проигнорирован по качеству

Denis Tsoi 20.06.2020 10:31

Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится. - Из обзора

Dragonthoughts 20.06.2020 14:01

Другие вопросы по теме