J'essaie de charger un fichier JSON local mais cela ne fonctionnera pas. Voici mon code JavaScript (en utilisant jQuery:
var json = $.getJSON("test.json");
var data = eval("(" +json.responseText + ")");
document.write(data["a"]);
Le fichier test.json:
{"a" : "b", "c" : "d"}
Rien ne s'affiche et Firebug me dit que les données ne sont pas définies. Dans Firebug je peux voir json.responseText
et c'est bon et valide, mais c'est étrange quand je copie la ligne:
var data = eval("(" +json.responseText + ")");
dans la console de Firebug, cela fonctionne et je peux accéder aux données.
Quelqu'un a une solution?
javascript
jquery
json
firebug
local-files
Patrick Browne
la source
la source
JSON
chaîne, vous récupérez déjà un objet javascript, pas besoin de l'utilisereval()
.test.json
ne spécifie aucun chemin, il s'agit donc d'un URI relatif, relatif à l'emplacement de la page y accédant. Ainsi, comme @ seppo0010 dit qu'elle sera locale au serveur si la page se trouve sur un serveur distant quelque part et qu'elle sera relative à votre ordinateur si la page se trouve dans votre système de fichiers local accessible par lefile://
protocole.Réponses:
$.getJSON
est asynchrone, vous devez donc faire:la source
J'avais le même besoin (pour tester mon application angularjs), et la seule façon que j'ai trouvée est d'utiliser require.js:
remarque: le fichier est chargé une fois, les appels ultérieurs utiliseront le cache.
Plus d'informations sur la lecture de fichiers avec nodejs: http://docs.nodejitsu.com/articles/file-system/how-to-read-files-in-nodejs
require.js: http://requirejs.org/
la source
jest.dontMock('./data.json');
sinon le résultat est vide. Cela pourrait être utile pour quelqu'un là-bas :)json
?has not been loaded yet for context: _. Use require([])
De manière plus moderne, vous pouvez désormais utiliser l' API Fetch :
Tous les navigateurs modernes prennent en charge l'API Fetch. (Internet Explorer ne le fait pas, mais Edge le fait!)
la source:
Utilisation de Fetch
Fetch en action
Puis-je utiliser...?
la source
file://
schéma.) Mais c'est une belle approche propre. J'ai commencé à l'utiliser grâce à cette réponse.Si vous souhaitez laisser l'utilisateur sélectionner le fichier json local (n'importe où sur le système de fichiers), la solution suivante fonctionne.
Il utilise utilise FileReader et JSON.parser (et pas de jquery).
Voici une bonne introduction sur FileReader: http://www.html5rocks.com/en/tutorials/file/dndfiles/
la source
newArr
Si vous cherchez quelque chose de rapide et de sale, chargez simplement les données dans la tête de votre document HTML.
data.js
index.html
main.js
Je dois mentionner que votre taille de tas (dans Chrome) est d'environ 4 Go, donc si vos données sont plus grandes que cela, vous devriez trouver une autre méthode. Si vous voulez vérifier un autre navigateur, essayez ceci:
la source
Version ES5
Version ES6
la source
file:///
protocole et le fichier ne peut plus être considéré comme local.Je ne peux pas croire combien de fois cette question a été répondue sans comprendre et / ou résoudre le problème avec le code réel de l'affiche originale. Cela dit, je suis moi-même un débutant (seulement 2 mois de codage). Mon code fonctionne parfaitement, mais n'hésitez pas à suggérer des modifications. Voici la solution:
Voici une manière plus courte d'écrire le même code que j'ai fourni ci-dessus:
Vous pouvez également utiliser $ .ajax au lieu de $ .getJSON pour écrire le code exactement de la même manière:
Enfin, la dernière façon de procéder consiste à encapsuler $ .ajax dans une fonction. Je ne peux pas prendre le crédit pour celui-ci, mais je l'ai modifié un peu. Je l'ai testé et cela fonctionne et produit les mêmes résultats que mon code ci-dessus. J'ai trouvé cette solution ici -> charger json dans une variable
Le fichier test.json que vous voyez dans mon code ci-dessus est hébergé sur mon serveur et contient le même objet de données json qu'il (l'affiche originale) avait posté.
la source
Je suis surpris que l'importation depuis es6 n'ait pas été mentionnée (utilisation avec de petits fichiers)
Ex:
import test from './test.json'
webpack 2 <utilise la
json-loader
valeur par défaut pour les.json
fichiers.https://webpack.js.org/guides/migrating/#json-loader-is-not-required-anymore
Pour TypeScript :
Pour le faire fonctionner, je devais d'abord déclarer le module. J'espère que cela fera gagner quelques heures à quelqu'un.
Si j'ai essayé d'omettre
loader
de,json-loader
j'ai obtenu l'erreur suivantewebpack
:la source
Essayez de cette façon (mais veuillez également noter que JavaScript n'a pas accès au système de fichiers client):
la source
Récemment, D3js est capable de gérer le fichier json local.
C'est le problème https://github.com/mbostock/d3/issues/673
Il s'agit du correctif pour que D3 fonctionne avec les fichiers json locaux. https://github.com/mbostock/d3/pull/632
la source
Trouvé ce fil lors de la tentative (infructueuse) de charger un fichier json local. Cette solution a fonctionné pour moi ...
... et est utilisé comme ça ...
... et c'est le
<head>
...la source
Dans TypeScript, vous pouvez utiliser l'importation pour charger des fichiers JSON locaux. Par exemple, charger un font.json:
Cela nécessite un indicateur tsconfig --resolveJsonModule:
Pour plus d'informations, consultez les notes de publication de typescript: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html
la source
Dans angular (ou tout autre framework), vous pouvez charger en utilisant http get je l'utilise quelque chose comme ceci:
J'espère que cela t'aides.
la source
Ce que j'ai fait, c'est éditer un peu le fichier JSON.
myfile.json
=>myfile.js
Dans le fichier JSON, (en faire une variable JS)
{name: "Whatever"}
=>var x = {name: "Whatever"}
À la fin,
export default x;
Ensuite,
import JsonObj from './myfile.js';
la source
Si vous utilisez un tableau local pour JSON - comme vous l'avez montré dans votre exemple dans la question (test.json), alors vous pouvez est la
parseJSON()
méthode de JQuery ->getJSON()
est utilisé pour obtenir JSON à partir d'un site distant - cela ne fonctionnera pas localement (sauf si vous utilisez un serveur HTTP local)la source
la source
Une approche que j'aime utiliser est de remplir / envelopper le json avec un littéral objet, puis d'enregistrer le fichier avec une extension de fichier .jsonp. Cette méthode laisse également votre fichier json d'origine (test.json) inchangé, car vous allez plutôt travailler avec le nouveau fichier jsonp (test.jsonp). Le nom sur l'encapsuleur peut être n'importe quoi, mais il doit être le même nom que la fonction de rappel que vous utilisez pour traiter le jsonp. Je vais utiliser votre test.json publié comme exemple pour montrer l'ajout de wrapper jsonp pour le fichier 'test.jsonp'.
Ensuite, créez une variable réutilisable avec une portée globale dans votre script pour contenir le JSON renvoyé. Cela rendra les données JSON renvoyées disponibles pour toutes les autres fonctions de votre script au lieu de la fonction de rappel uniquement.
Vient ensuite une fonction simple pour récupérer votre json par injection de script. Notez que nous ne pouvons pas utiliser jQuery ici pour ajouter le script à l'en-tête du document, car IE ne prend pas en charge la méthode jQuery .append. La méthode jQuery commentée dans le code ci-dessous fonctionnera sur d'autres navigateurs qui prennent en charge la méthode .append. Il est inclus comme référence pour montrer la différence.
Vient ensuite une fonction de rappel courte et simple (avec le même nom que l'encapsuleur jsonp) pour obtenir les données de résultats json dans la variable globale.
Les données json sont désormais accessibles par toutes les fonctions du script en utilisant la notation par points. Par exemple:
Cette méthode peut être un peu différente de ce que vous avez l'habitude de voir, mais présente de nombreux avantages. Tout d'abord, le même fichier jsonp peut être chargé localement ou à partir d'un serveur en utilisant les mêmes fonctions. En prime, jsonp est déjà dans un format compatible avec plusieurs domaines et peut également être facilement utilisé avec les API de type REST.
Certes, il n'y a pas de fonctions de gestion des erreurs, mais pourquoi en auriez-vous besoin? Si vous ne parvenez pas à obtenir les données json en utilisant cette méthode, alors vous pouvez à peu près parier que vous avez des problèmes avec le json lui-même, et je le vérifierais sur un bon validateur JSON.
la source
Vous pouvez mettre votre json dans un fichier javascript. Cela peut être chargé localement (même dans Chrome) en utilisant la
getScript()
fonction de jQuery .Fichier map-01.js:
main.js
production:
Notez que la variable json est déclarée et affectée dans le fichier js.
la source
Je n'ai trouvé aucune solution en utilisant la bibliothèque Google Closure. Donc, juste pour compléter la liste des futurs visiteurs, voici comment charger un JSON à partir d'un fichier local avec la bibliothèque Closure:
la source
J'ai fait cela pour mon application cordova, comme si j'avais créé un nouveau fichier javascript pour le JSON et collé les données JSON
String.raw
puis les analyser avecJSON.parse
la source
JavaScript Object Notation
(JSON):obj = [{"name": "Jeeva"}, {"name": "Kumar"}]
JSON.parse
pour convertir en un objet JavaScriptCe que j'ai fait, tout d'abord, à partir de l'onglet réseau, enregistrer le trafic réseau pour le service, et à partir du corps de réponse, copier et enregistrer l'objet json dans un fichier local. Appelez ensuite la fonction avec le nom du fichier local, vous devriez pouvoir voir l'objet json dans jsonOutout ci-dessus.
la source
Ce qui a fonctionné pour moi est le suivant:
Contribution:
Code Javascript:
la source
Si vous avez Python installé sur votre machine locale (ou si cela ne vous dérange pas d'en installer un), voici une solution de contournement indépendante du navigateur pour le problème d'accès au fichier JSON local que j'utilise:
Transformez le fichier JSON en JavaScript en créant une fonction qui renvoie les données en tant qu'objet JavaScript. Ensuite, vous pouvez le charger avec la balise <script> et appeler la fonction pour obtenir les données que vous souhaitez.
Voici le code Python
la source