J'essaye de charger un fichier .json dans une variable en javascript, mais je n'arrive pas à le faire fonctionner. C'est probablement juste une erreur mineure mais je ne la trouve pas.
Tout fonctionne très bien lorsque j'utilise des données statiques comme celle-ci:
var json = {
id: "whatever",
name: "start",
children: [{
"id": "0.9685",
"name": " contents:queue"
}, {
"id": "0.79281",
"name": " contents:mqq_error"
}
}]
}
J'ai mis tout ce qui se trouve dans {}
un content.json
fichier et j'ai essayé de le charger dans une variable JavaScript locale comme expliqué ici: chargez json dans une variable .
var json = (function() {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': "/content.json",
'dataType': "json",
'success': function(data) {
json = data;
}
});
return json;
})();
Je l'ai exécuté avec le débogueur Chrome et il me dit toujours que la valeur de la variable json
est null
. Le content.json
fichier réside dans le même répertoire que le fichier .js qui l'appelle.
Qu'est-ce que j'ai raté?
javascript
jquery
json
PogoMips
la source
la source
/content.json
ce qui signifie que le fichier se trouve au niveau racine de votre application Web. Passez àcontent.json
(sans barre oblique) pour le pointer dans le même répertoire où votre fichier de script est placé. Seulement dans le cas où votre fichier de script est dans le répertoire de niveau racine, cela fonctionnera.Réponses:
Si vous avez collé votre objet
content.json
directement dans , il s'agit d'un JSON non valide. Les clés et les valeurs JSON doivent être placées entre guillemets ("
pas'
) sauf si la valeur est numérique, booléennenull
ou composite (tableau ou objet). JSON ne peut pas contenir de fonctions ou deundefined
valeurs. Voici votre objet en tant que JSON valide.Vous aviez également un extra
}
.la source
Ma solution, comme répondu ici , est d'utiliser:
Le fichier est chargé une seule fois, les autres requêtes utilisent le cache.
edit Pour éviter la mise en cache, voici la fonction d'assistance de cet article de blog donnée dans les commentaires, en utilisant le
fs
module:la source
Pour ES6 / ES2015, vous pouvez importer directement comme:
Si vous utilisez Typescript, vous pouvez déclarer un module json comme:
Depuis Typescript 2.9+, vous pouvez ajouter - resolverJsonModule compilerOptions dans
tsconfig.json
la source
Uncaught SyntaxError: Unexpected token *
data
soit un module maisdata.default
c'est l'objetSyntaxError: Unexpected token *
import * as data from './example.json'
raison d'une erreur de type mime.import * as data from './example.json';
alorsdata
c'est juste un module, maisdata.default
c'est l'objet. Mais quand j'utiliseimport data from './example.json';
alorsdata
c'est l'objet, qui est plus applicableIl y a deux problèmes possibles:
AJAX est asynchrone, il
json
ne sera donc pas défini lorsque vous reviendrez de la fonction externe. Lorsque le fichier a été chargé, la fonction de rappel sera définiejson
sur une certaine valeur mais à ce moment-là, personne ne s'en soucie plus.Je vois que vous avez essayé de résoudre ce problème avec
'async': false
. Pour vérifier si cela fonctionne, ajoutez cette ligne au code et vérifiez la console de votre navigateur:Le chemin pourrait être erroné. Utilisez le même chemin que celui utilisé pour charger votre script dans le document HTML. Donc, si votre script est
js/script.js
, utilisezjs/content.json
Certains navigateurs peuvent vous montrer à quelles URL ils ont tenté d'accéder et comment cela s'est passé (codes de réussite / d'erreur, en-têtes HTML, etc.). Consultez les outils de développement de votre navigateur pour voir ce qui se passe.
la source
Le module node.js intégré fs le fera de manière asynchrone ou synchrone en fonction de vos besoins.
Vous pouvez le charger en utilisant
var fs = require('fs');
Asynchrone
Synchrone
la source
Pour le format json donné comme dans le fichier ~ / my-app / src / db / abc.json:
afin d'importer dans un fichier .js comme ~ / my-app / src / app.js:
Production:
la source