Como importar um ficheiro JSON no ECMAScript 6?

Como posso aceder a um ficheiro JSON no ECMAScript 6?

o seguinte não funciona:

import config from '../config.json'

isto funciona bem se eu tentar importar um ficheiro JavaScript.

Author: Uwe Keim, 2016-01-22

15 answers

Uma simples solução:

Config.js

export default
{
  // my json here...
}
Então...
import config from '../config.js'

Não permite a importação de produtos existentes .ficheiros do json, mas faz um trabalho.

 92
Author: Gilbert, 2018-08-24 09:25:48

Em Script ou usando Babel, você pode importar JSON arquivo no seu código.

// Babel

import * as data from './example.json';
const word = data.name;
console.log(word); // output 'testing'

Referência: https://hackernoon.com/import-json-into-typescript-8d465beded79

 149
Author: williamli, 2019-06-29 11:39:18
Infelizmente o ES6 / ES2015 não suporta carregar o JSON através da sintaxe de importação do módulo. Mas... Há muitas maneiras de o fazer. Dependendo das suas necessidades, tanto poderá ver como ler os ficheiros em JavaScript (window.FileReader poderá ser uma opção se estiver a correr no navegador) como usar outros carregadores, tal como descrito em outras perguntas (assumindo que está a usar o NodeJS). A forma mais simples da OMI é provavelmente colocar o JSON como um objecto JS num Módulo ES6 e exportá-lo. Assim podes importá-lo onde quiseres.

Também vale a pena notar se estiver a usar o Webpack, a importação de ficheiros JSON irá funcionar por omissão (desde webpack >= v2.0.0).

import config from '../config.json';
 74
Author: Simone, 2018-05-30 11:24:10

Estou a usar o babel+browserify e tenho um ficheiro JSON numa pasta ./i18n / locale-en.json with translations namespace (to be used with ngTranslate).

Sem ter de exportar nada do ficheiro JSON (que o btw não é possível), eu poderia fazer uma importação por omissão do seu conteúdo com esta sintaxe:

import translationsJSON from './i18n/locale-en';
 22
Author: Francisco Neto, 2017-01-31 00:07:45

Se estiver a usar o nó pode:

const fs = require('fs');

const { config } = JSON.parse(fs.readFileSync('../config.json', 'utf8')) // May be incorrect, haven't used fs in a long time

Ou

const evaluation = require('../config.json');
// evaluation will then contain all props, so evaluation.config
// or you could use:
const { config } = require('../config.json');

Else:

// config.js
{
// json object here
}

// script.js

import { config } from '../config.js';

Ou

import * from '../config.json'
 17
Author: Anonymous User 2903, 2019-01-18 21:06:12

Dependendo da sua ferramenta de compilação e da estrutura de dados dentro do ficheiro JSON, poderá necessitar de importar o default.

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

Por exemplo, utilização dentro Next.js

 17
Author: Pat Migliaccio, 2019-06-19 13:10:24

Num navegador com fetch (basicamente todos eles agora):

De momento, não podemos {[[2]} Ficheiros com um tipo MIME JSON, apenas ficheiros com um tipo MIME JavaScript. Pode ser uma característica adicionada no futuro ([[8]}discussão oficial ).

fetch('./file.json')
  .then(response => response.json())
  .then(obj => console.log(obj))

No Nó.js v13. 2+:

Actualmente, requer a --experimental-json-modules flag , caso contrário não é suportado por omissão.

Tenta correr

node --input-type module --experimental-json-modules --eval "import obj from './file.json'; console.log(obj)"
E vê o conteúdo do obj a ser colocado na consola.
 14
Author: trusktr, 2020-03-21 03:56:55

Um pouco tarde, mas eu apenas tropecei no mesmo problema ao tentar fornecer análises para o meu aplicativo web que envolveu o envio de Versão app com base no Pacote.versão json.

A configuração é a seguinte: React + Redux, Webpack 3. 5. 6

O carregador json não está a fazer muito desde o Webpack 2+, por isso, depois de mexer com ele, acabei por removê-lo.

A solução que realmente funcionou para mim, era simplesmente usar o fetch. Enquanto isso provavelmente irá impor algum código mudanças para se adaptar à abordagem async, funcionou perfeitamente, especialmente dado o fato de que fetch vai oferecer decodificação json no momento.

Então aqui está:
  fetch('../../package.json')
  .then(resp => resp.json())
  .then((packageJson) => {
    console.log(packageJson.version);
  });
Lembra-te disso, já que estamos a falar de pacote.json especificamente aqui, o arquivo geralmente não vem empacotado em sua compilação de produção (ou até mesmo dev para esse assunto), então você terá que usar o CopyWebpackPlugin para ter acesso a ele ao usar o fetch.
 3
Author: Avram Tudor, 2017-09-26 13:11:48

Simplesmente faz isto:

import * as importedConfig from '../config.json';

Então use - o como se segue:

const config = importedConfig.default;
 2
Author: newwebdev, 2020-10-22 14:30:44
Para os NodeJS v12 e acima, --experimental-json-modules faria o truque, sem qualquer ajuda de babel.

Https://nodejs.org/docs/latest-v14.x/api/esm.html#esm_experimental_json_modules

Mas é importado na forma commonjs, por isso import { a, b } from 'c.json' ainda não é suportado.

Mas podes fazer:

import c from 'c.json';
const { a, b } = c;
 1
Author: aGuegu, 2020-11-11 01:38:00

Adicionando às outras respostas, no nó.js é possível usar require para ler arquivos JSON mesmo dentro dos módulos ES. Eu achei isso especialmente útil ao ler arquivos dentro de outros pacotes, porque ele tira vantagem da própria estratégia de resolução do módulo do Node para localizar o arquivo.

require em um módulo ES deve ser criado primeiro com createRequire.

Aqui está um exemplo completo:

import { createRequire } from 'module';

const require = createRequire(import.meta.url);
const packageJson = require('typescript/package.json');
console.log(`You have TypeScript version ${packageJson.version} installed.`);

Num projecto com o TypeScript instalado, o código acima será lido e imprime o número da versão do TypeScript do pacote.json.

 1
Author: GOTO 0, 2020-12-12 09:53:40

Usei-o para instalar o 'plugin' "babel-plugin-inline-json-import" e depois para dentro .balberc adiciona o plugin.

  1. Plugin de instalação

    Npm install --save-dev babel-plugin-inline-json-import

  2. 'Plugin' de configuração em babelrc

    "plugin": [ "inline-json-import" ]

E este é o código onde o uso

import es from './es.json'
import en from './en.json'

export const dictionary = { es, en }
 0
Author: ramsesls, 2021-01-08 22:53:13
A importação de ficheiros JSON ainda é experimental. Pode ser suportado através da bandeira abaixo.

--experimental-JSON-modules

Caso contrário, pode carregar o seu ficheiro JSON em relação a import.meta.url com fs directamente: -

import { readFile } from 'fs/promises';
const config = JSON.parse(await readFile(new URL('../config.json', import.meta.url)));

Também pode usar module.createRequire()

import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const config = require('../config.json');
 0
Author: azad, 2021-01-22 22:03:50

Estou a usar

  • vuejs, version: 2.6.12
  • vuex, version: 3.6.0
  • vuex-i18n, version: 1.13.1.

A minha solução é:

Mensagens.js:

import Vue from 'vue'
import Vuex from 'vuex';
import vuexI18n from 'vuex-i18n';
import translationsPl from './messages_pl'
import translationsEn from './messages_en'

Vue.use(Vuex);

export const messages = new Vuex.Store();

Vue.use(vuexI18n.plugin, messages);

Vue.i18n.add('en', translationsEn);
Vue.i18n.add('pl', translationsPl);

Vue.i18n.set('pl');

Messages_pl.json:

{
    "loadingSpinner.text:"Ładowanie..."
}
Messages_en.json:
{
    "loadingSpinner.default.text":"Loading..."
}

Majn.js

import {messages} from './i18n/messages'
Vue.use(messages);
 0
Author: Piotr Żak, 2021-02-04 14:28:36
let config = require('../config.json')

Isto deve carregar o ficheiro json correctamente

 -1
Author: Stefani, 2021-01-20 05:32:56