Как импортировать файл json с помощью angular и typescript

Я пытаюсь импортировать локальный файл json в приложение angular. Я не хочу использовать http. Я знаю, что есть еще несколько вопросов по этому поводу, но ничего из того, что я пробовал, похоже, не работает. Я запустил npm install typescript, чтобы получить последнюю версию. Файл определенно там, потому что VisualStudioCode дает мне список выбора при редактировании.

Данные представлены в виде: -

{
  "nodes": [
    {"id": "Myriel", "group": 1},
    {"id": "Napoleon", "group": 1}
  ],
  "links": [
    {"source": "Napoleon", "target": "Myriel", "value": 1},
    {"source": "Mlle.Baptistine", "target": "Myriel", "value": 8},
    {"source": "Mme.Magloire", "target": "Myriel", "value": 10}
  ]
}

Я пытался:-

import mydata from '../mydata.json';

и

import * as mydata from '../mydata.json';

и

import {default as mydata} from '../mydata.json';

и

import mydata = require('../mydata.json');

с участием

// ./tsconfig.json
{
    "compilerOptions": {
        "module": "commonjs",
        "resolveJsonModule": true,
        "esModuleInterop": true
    }
}

которые обычно дают ошибку компиляции, не могут найти модуль mydata.json, кроме require (), который говорит мне использовать один из первых трех, которые я пробовал.

Я использую D3, поэтому попробовал

d3fetch.json("../mydata.json, function(error, data) 

что дает ошибку времени выполнения 404, не найден [http: // localhost: 4200 / mydata.json]

ты это проверил? hackernoon.com/import-json-into-typescript-8d465beded79

Suresh Kumar Ariya 18.12.2018 19:28
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
1
2 726
1

Ответы 1

Это MVCE:

// main.ts
import file from './file.json';
console.info(file);

// file.json
{ "hello": "world" }

// index.d.ts
declare module '*.json' {
    const value: any;
    export default value;
}

// tsconfig.json
{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "esModuleInterop": true,
    "resolveJsonModule": true
  }
}

Могу сделать это:

> tsc
> node main.ts
{ hello: 'world' }

Возможно, вам стоит добавить файл декларации json.

Я бы также предложил другой способ: добавить веб-пакет json-загрузчик и включить json в module.exports.resolve.extensions в webpack.config.json.

Обратите внимание, что каждый JSON является допустимым файлом JS - если этот файл не используется другими объектами, вы можете заменить его расширение на .js и добавить export default { "nodes": ... в начало файла.

Это тоже сработало, спасибо. Любая идея, почему resolveJsonModule в машинописном тексте 2.9 не работает так, как предполагалось?

Richard Jacobs 19.12.2018 11:18

Извините, что снова беспокою вас, но я получаю сообщение об ошибке. Данные (mydata.links) не существуют для typeof "* .json". Предположительно, мне нужно изменить typings.d.ts, чтобы быть более точным, но я не знаю, как изменить его, чтобы отразить мою структуру данных.

Richard Jacobs 19.12.2018 17:22

Этого не должно происходить, согласно приведенному выше файлу декларации, вы заявляете, что typeof "*.json" - это any, поэтому ошибка property doesn't exist не должна выдаваться. Можете ли вы связать MVCE, чтобы я мог наблюдать за вашей кодовой базой?

Nino Filiu 19.12.2018 18:19

Также, пожалуйста, проголосуйте за и / или подтвердите любой ответ, который работает

Nino Filiu 19.12.2018 18:19

Это немного сложно сделать MVCE, поскольку он находится в середине приложения с принудительно направленным графиком. Он жалуется на то, что свойство ссылок не существует. Я исправил это, разделив json на два файла, один для узлов и один для ссылок.

Richard Jacobs 19.12.2018 18:39

Я подтвердил ваш ответ, спасибо. На самом деле я хотел бы знать, как правильно сделать модуль объявления для моей структуры данных, то есть такой, который включает идентификаторы «ссылки» и «узлы».

Richard Jacobs 19.12.2018 18:48

Итак, теперь все перестало работать, когда я перезапустил ng serve (angular) и получил неизвестный модуль resolveJson с параметром компилятора!

Richard Jacobs 19.12.2018 20:21

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