Ich versuche, eine .json-Datei in eine Variable in Javascript zu laden, aber ich kann sie nicht zum Laufen bringen. Es ist wahrscheinlich nur ein kleiner Fehler, aber ich kann ihn nicht finden.
Alles funktioniert einwandfrei, wenn ich statische Daten wie folgt verwende:
var json = {
id: "whatever",
name: "start",
children: [{
"id": "0.9685",
"name": " contents:queue"
}, {
"id": "0.79281",
"name": " contents:mqq_error"
}
}]
}
Ich habe alles, was in der Datei enthalten ist, {}
in eine content.json
Datei eingefügt und versucht, dies in eine lokale JavaScript-Variable zu laden, wie hier erläutert: Laden Sie json in eine Variable .
var json = (function() {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': "/content.json",
'dataType': "json",
'success': function(data) {
json = data;
}
});
return json;
})();
Ich habe es mit dem Chrome-Debugger ausgeführt und es sagt mir immer, dass der Wert der Variablen json
ist null
. Die content.json
Datei befindet sich im selben Verzeichnis wie die JS-Datei, die sie aufruft.
Was habe ich verpasst?
javascript
jquery
json
PogoMips
quelle
quelle
/content.json
bedeutet, dass sich die Datei auf der Stammebene Ihrer Webanwendung befindet. Wechseln Sie zucontent.json
(ohne Schrägstrich), um auf dasselbe Verzeichnis zu verweisen, in dem sich Ihre Skriptdatei befindet. Nur für den Fall, dass sich Ihre Skriptdatei im Stammverzeichnis befindet, funktioniert sie.Antworten:
Wenn Sie Ihr Objekt
content.json
direkt eingefügt haben , ist JSON ungültig. JSON-Schlüssel und -Werte müssen in doppelte Anführungszeichen gesetzt werden ("
nicht'
), es sei denn, der Wert ist numerisch, booleschnull
oder zusammengesetzt (Array oder Objekt). JSON darf keine Funktionen oderundefined
Werte enthalten. Unten ist Ihr Objekt als gültiger JSON.Sie hatten auch ein Extra
}
.quelle
Meine hier beantwortete Lösung lautet:
Die Datei wird nur einmal geladen, weitere Anfragen verwenden den Cache.
Bearbeiten Um Caching zu vermeiden, finden Sie hier die Hilfsfunktion dieses Blogposts in den Kommentaren mithilfe des
fs
Moduls:quelle
Für ES6 / ES2015 können Sie direkt importieren wie:
Wenn Sie Typescript verwenden, können Sie das JSON-Modul wie folgt deklarieren:
Seit Typescript 2.9+ können Sie hinzufügen - auflösenJsonModule compilerOptions in
tsconfig.json
quelle
Uncaught SyntaxError: Unexpected token *
data
es ein Modul zu sein, aber esdata.default
ist das ObjektSyntaxError: Unexpected token *
import * as data from './example.json'
aufgrund eines MIME-Typ-Fehlers einen Konsolenfehler erhalte .import * as data from './example.json';
danndata
ist nur modul, aberdata.default
ist das objekt. Aber wenn ichimport data from './example.json';
dann benutze,data
ist das Objekt, das anwendbarer istEs gibt zwei mögliche Probleme:
AJAX ist asynchron und wird daher
json
nicht definiert, wenn Sie von der äußeren Funktion zurückkehren. Wenn die Datei geladen wurde, wird die Rückruffunktionjson
auf einen bestimmten Wert gesetzt, aber zu diesem Zeitpunkt kümmert sich niemand mehr darum.Ich sehe, dass Sie versucht haben, dies zu beheben
'async': false
. Um zu überprüfen, ob dies funktioniert, fügen Sie diese Zeile zum Code hinzu und überprüfen Sie die Konsole Ihres Browsers:Der Pfad könnte falsch sein. Verwenden Sie denselben Pfad, den Sie zum Laden Ihres Skripts in das HTML-Dokument verwendet haben. Also, wenn Ihr Skript ist
js/script.js
, verwenden Siejs/content.json
Einige Browser können Ihnen zeigen, auf welche URLs sie zugreifen wollten und wie dies ging (Erfolgs- / Fehlercodes, HTML-Header usw.). Überprüfen Sie die Entwicklungstools Ihres Browsers, um festzustellen, was passiert.
quelle
Das eingebaute node.js-Modul fs dies je nach Bedarf entweder asynchron oder synchron.
Sie können es mit laden
var fs = require('fs');
Asynchron
Synchron
quelle
Für das angegebene JSON-Format wie in der Datei ~ / my-app / src / db / abc.json:
Um in eine .js-Datei wie ~ / my-app / src / app.js zu importieren:
Ausgabe:
quelle