Estou tentando carregar um arquivo JSON local, mas ele não funcionará. Aqui está o meu código JavaScript (usando jQuery:
var json = $.getJSON("test.json");
var data = eval("(" +json.responseText + ")");
document.write(data["a"]);
O arquivo test.json:
{"a" : "b", "c" : "d"}
Nada é exibido e o Firebug informa que os dados são indefinidos. No Firebug eu posso ver json.responseText
e é bom e válido, mas é estranho quando copio a linha:
var data = eval("(" +json.responseText + ")");
no console do Firebug, ele funciona e eu posso acessar dados.
Alguém tem uma solução?
javascript
jquery
json
firebug
local-files
Patrick Browne
fonte
fonte
JSON
string, você já está recuperando um objeto javascript, não precisa usareval()
.test.json
não especifica nenhum caminho, portanto, é um URI relativo, relativo ao local da página que o acessa. Assim como @ seppo0010 diz que será local para o servidor se a página estiver em um servidor remoto em algum lugar e será relativo ao seu computador se a página estiver em seu sistema de arquivos local acessado pelofile://
protocolo.Respostas:
$.getJSON
é assíncrono, então você deve fazer:fonte
Eu tinha a mesma necessidade (para testar meu aplicativo angularjs) e a única maneira que encontrei é usar o require.js:
nota: o arquivo é carregado uma vez, outras chamadas usarão o cache.
Mais sobre como ler arquivos com o nodejs: http://docs.nodejitsu.com/articles/file-system/how-to-read-files-in-nodejs
require.js: http://requirejs.org/
fonte
jest.dontMock('./data.json');
ou o resultado está vazio. Pode ser útil para alguém lá fora :)json
?has not been loaded yet for context: _. Use require([])
De uma maneira mais moderna, agora você pode usar a API de busca :
Todos os navegadores modernos oferecem suporte à API de busca. (O Internet Explorer não, mas o Edge sim!)
fonte:
Usando Buscar
Buscar em ação
Eu posso usar...?
fonte
file://
esquema.) Mas é uma abordagem agradável, limpo que eu comecei a usá-lo graças a esta resposta..Se você deseja permitir que o usuário selecione o arquivo json local (em qualquer lugar do sistema de arquivos), a solução a seguir funciona.
Ele usa usa FileReader e JSON.parser (e não jquery).
Aqui está uma boa introdução ao FileReader: http://www.html5rocks.com/en/tutorials/file/dndfiles/
fonte
newArr
Se você está procurando algo rápido e sujo, basta carregar os dados no cabeçalho do seu documento HTML.
data.js
index.html
main.js
Devo mencionar que o tamanho do seu heap (no Chrome) é de cerca de 4 GB, portanto, se seus dados forem maiores que isso, você deverá encontrar outro método. Se você quiser verificar outro navegador, tente o seguinte:
fonte
Versão ES5
Versão ES6
fonte
file:///
protocolo e o arquivo não pode mais ser considerado local.Não consigo acreditar quantas vezes essa pergunta foi respondida sem entender e / ou resolver o problema com o código real do pôster original. Dito isto, eu também sou iniciante (apenas 2 meses de codificação). Meu código funciona perfeitamente, mas fique à vontade para sugerir alterações. Aqui está a solução:
Aqui está uma maneira mais curta de escrever o mesmo código que forneci acima:
Você também pode usar $ .ajax em vez de $ .getJSON para escrever o código exatamente da mesma maneira:
Finalmente, a última maneira de fazer isso é agrupar $ .ajax em uma função. Não posso receber crédito por este, mas o modifiquei um pouco. Eu testei e funciona e produz os mesmos resultados que o meu código acima. Encontrei esta solução aqui -> carregar json na variável
O arquivo test.json que você vê no meu código acima está hospedado no meu servidor e contém o mesmo objeto de dados json que ele (o pôster original) postou.
fonte
Estou surpreso que a importação do es6 não tenha sido mencionada (use com arquivos pequenos)
Ex:
import test from './test.json'
O webpack 2 <usa o
json-loader
padrão para.json
arquivos.https://webpack.js.org/guides/migrating/#json-loader-is-not-required-anymore
Para TypeScript :
Para fazê-lo funcionar, tive que declarar o módulo primeiro. Espero que isso economize algumas horas para alguém.
Se eu tentasse omitir
loader
a partirjson-loader
Eu tenho o seguinte erro dewebpack
:fonte
Try é assim (mas também observe que o JavaScript não tem acesso ao sistema de arquivos do cliente):
fonte
Recentemente, o D3js é capaz de lidar com arquivos json locais.
Este é o problema https://github.com/mbostock/d3/issues/673
Este é o pedido de atualização do D3 para trabalhar com arquivos json locais. https://github.com/mbostock/d3/pull/632
fonte
Encontrei este encadeamento ao tentar (sem êxito) carregar um arquivo json local. Esta solução funcionou para mim ...
... e é usado assim ...
... e este é o
<head>
...fonte
No TypeScript, você pode usar a importação para carregar arquivos JSON locais. Por exemplo, carregando um font.json:
Isso requer um sinalizador tsconfig --resolveJsonModule:
Para obter mais informações, consulte as notas de versão do datilografado: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html
fonte
No angular (ou em qualquer outra estrutura), você pode carregar usando http get, eu uso algo assim:
Espero que isto ajude.
fonte
O que eu fiz foi editar um pouco o arquivo JSON.
myfile.json
=>myfile.js
No arquivo JSON, (torne-o uma variável JS)
{name: "Whatever"}
=>var x = {name: "Whatever"}
No fim,
export default x;
Então,
import JsonObj from './myfile.js';
fonte
Se você estiver usando uma matriz local para JSON - como você mostrou no seu exemplo na pergunta (test.json), será possível o
parseJSON()
método JQuery ->getJSON()
é usado para obter JSON de um site remoto - não funcionará localmente (a menos que você esteja usando um servidor HTTP local)fonte
fonte
Uma abordagem que eu gosto de usar é preencher / envolver o json com um literal de objeto e salvar o arquivo com uma extensão de arquivo .jsonp. Esse método também mantém o arquivo json original (test.json) inalterado, pois você estará trabalhando com o novo arquivo jsonp (test.jsonp). O nome no wrapper pode ser qualquer coisa, mas precisa ser o mesmo nome da função de retorno de chamada usada para processar o jsonp. Usarei seu test.json postado como um exemplo para mostrar a adição do wrapper jsonp para o arquivo 'test.jsonp'.
Em seguida, crie uma variável reutilizável com escopo global em seu script para manter o JSON retornado. Isso tornará os dados JSON retornados disponíveis para todas as outras funções em seu script, em vez de apenas a função de retorno de chamada.
Em seguida, vem uma função simples para recuperar seu json por injeção de script. Observe que não podemos usar o jQuery aqui para anexar o script ao cabeçalho do documento, pois o IE não suporta o método .append do jQuery. O método jQuery comentado no código abaixo funcionará em outros navegadores que suportam o método .append. Está incluído como referência para mostrar a diferença.
A seguir, é apresentada uma função de retorno de chamada curta e simples (com o mesmo nome do wrapper jsonp) para obter os dados dos resultados do json na variável global.
Os dados json agora podem ser acessados por qualquer função do script usando a notação de ponto. Como um exemplo:
Esse método pode ser um pouco diferente do que você está acostumado a ver, mas tem muitas vantagens. Primeiro, o mesmo arquivo jsonp pode ser carregado localmente ou em um servidor usando as mesmas funções. Como um bônus, o jsonp já está em um formato compatível com vários domínios e também pode ser facilmente usado com APIs do tipo REST.
Concedido, não há funções de tratamento de erros, mas por que você precisaria de uma? Se você não conseguir obter os dados do json usando esse método, pode apostar que tem alguns problemas no próprio json, e eu verificaria isso em um bom validador JSON.
fonte
Você pode colocar seu json em um arquivo javascript. Isso pode ser carregado localmente (mesmo no Chrome) usando a
getScript()
função do jQuery .arquivo map-01.js:
main.js
resultado:
Observe que a variável json é declarada e designada no arquivo js.
fonte
Não encontrei nenhuma solução usando a biblioteca Closure do Google. Portanto, apenas para completar a lista de futuros visitantes, veja como você carrega um JSON a partir do arquivo local com a biblioteca Closure:
fonte
Fiz isso no meu aplicativo cordova, como se eu tivesse criado um novo arquivo javascript para o JSON e colado os dados do JSON para
String.raw
depois analisá-lo comJSON.parse
fonte
JavaScript Object Notation
(JSON):obj = [{"name": "Jeeva"}, {"name": "Kumar"}]
JSON.parse
para converter para um objeto JavaScriptO que fiz foi, em primeiro lugar, na guia rede, registrar o tráfego de rede para o serviço e, no corpo da resposta, copiar e salvar o objeto json em um arquivo local. Em seguida, chame a função com o nome do arquivo local; você poderá ver o objeto json no jsonOutout acima.
fonte
O que funcionou para mim é o seguinte:
Entrada:
Código Javascript:
fonte
Se você possui o Python instalado em sua máquina local (ou não se importa de instalar uma), aqui está uma solução independente do navegador para o problema local de acesso a arquivos JSON que eu uso:
Transforme o arquivo JSON em JavaScript criando uma função que retorna os dados como objeto JavaScript. Em seguida, você pode carregá-lo com a tag <script> e chamar a função para obter os dados desejados.
Aí vem o código Python
fonte