Ich versuche, eine lokale JSON-Datei zu laden, aber es funktioniert nicht. Hier ist mein JavaScript-Code (mit jQuery:
var json = $.getJSON("test.json");
var data = eval("(" +json.responseText + ")");
document.write(data["a"]);
Die Datei test.json:
{"a" : "b", "c" : "d"}
Es wird nichts angezeigt und Firebug teilt mir mit, dass die Daten nicht definiert sind. In Firebug kann ich sehen json.responseText
und es ist gut und gültig, aber es ist seltsam, wenn ich die Zeile kopiere:
var data = eval("(" +json.responseText + ")");
In der Firebug-Konsole funktioniert es und ich kann auf Daten zugreifen.
Hat jemand eine Lösung?
javascript
jquery
json
firebug
local-files
Patrick Browne
quelle
quelle
JSON
Zeichenfolge zurückgeben, rufen Sie bereits ein Javascript-Objekt ab, das Sie nicht verwenden müsseneval()
.test.json
gibt keinen Pfad an, daher handelt es sich um einen relativen URI, relativ zum Speicherort der Seite, die darauf zugreift. Wie @ seppo0010 sagt, ist es lokal für den Server, wenn sich die Seite irgendwo auf einem Remote-Server befindet, und relativ zu Ihrem Computer, wenn sich die Seite in Ihrem lokalen Dateisystem befindet, auf das dasfile://
Protokoll zugreift .Antworten:
$.getJSON
ist asynchron, also sollten Sie Folgendes tun:quelle
Ich hatte das gleiche Bedürfnis (um meine anglejs App zu testen) und der einzige Weg, den ich gefunden habe, ist die Verwendung von require.js:
Hinweis: Die Datei wird einmal geladen, weitere Aufrufe verwenden den Cache.
Weitere Informationen zum Lesen von Dateien mit nodejs: http://docs.nodejitsu.com/articles/file-system/how-to-read-files-in-nodejs
require.js: http://requirejs.org/
quelle
jest.dontMock('./data.json');
sonst ist das Ergebnis leer. Könnte für jemanden da draußen nützlich sein :)json
?has not been loaded yet for context: _. Use require([])
Auf modernere Weise können Sie jetzt die Fetch-API verwenden :
Alle modernen Browser unterstützen die Fetch-API. (Internet Explorer nicht, Edge jedoch!)
Quelle:
Verwenden von Fetch
In Aktion holen
Kann ich benutzen...?
quelle
file://
Schema auf Dateien zuzugreifen .) Aber es ist ein schöner, sauberer Ansatz. Ich habe dank dieser Antwort damit begonnen.Wenn Sie möchten, dass der Benutzer die lokale JSON-Datei (irgendwo im Dateisystem) auswählt, funktioniert die folgende Lösung.
Es verwendet FileReader und JSON.parser (und keine jquery).
Hier ist eine gute Einführung in FileReader: http://www.html5rocks.com/en/tutorials/file/dndfiles/
quelle
newArr
Wenn Sie nach etwas schnellem und schmutzigem suchen, laden Sie einfach die Daten in den Kopf Ihres HTML-Dokuments.
data.js
index.html
main.js
Ich sollte erwähnen, dass Ihre Heap-Größe (in Chrome) ungefähr 4 GB beträgt. Wenn Ihre Daten also größer sind, sollten Sie eine andere Methode finden. Wenn Sie einen anderen Browser überprüfen möchten, versuchen Sie Folgendes:
quelle
ES5-Version
ES6-Version
quelle
file:///
Protokoll nicht verwenden und die Datei nicht mehr als lokal angesehen werden kann.Ich kann nicht glauben, wie oft diese Frage beantwortet wurde, ohne das Problem mit dem tatsächlichen Code des Originalplakats zu verstehen und / oder anzugehen. Das heißt, ich bin selbst ein Anfänger (nur 2 Monate Codierung). Mein Code funktioniert einwandfrei, aber Sie können jederzeit Änderungen vorschlagen. Hier ist die Lösung:
Hier ist eine kürzere Möglichkeit, denselben Code zu schreiben, den ich oben angegeben habe:
Sie können auch $ .ajax anstelle von $ .getJSON verwenden, um den Code genauso zu schreiben:
Der letzte Weg, dies zu tun, besteht darin, $ .ajax in eine Funktion zu verpacken. Ich kann diesen nicht gutschreiben, aber ich habe ihn ein wenig modifiziert. Ich habe es getestet und es funktioniert und liefert die gleichen Ergebnisse wie mein Code oben. Ich habe diese Lösung hier gefunden -> lade json in variable
Die Datei test.json , die Sie in meinem obigen Code sehen, wird auf meinem Server gehostet und enthält dasselbe json-Datenobjekt, das er (das Originalposter) gepostet hat.
quelle
Ich bin überrascht, dass der Import von es6 nicht erwähnt wurde (Verwendung mit kleinen Dateien)
Ex:
import test from './test.json'
webpack 2 <verwendet die
json-loader
Standardeinstellung für.json
Dateien.https://webpack.js.org/guides/migrating/#json-loader-is-not-required-anymore
Für TypeScript :
Damit es funktioniert, musste ich zuerst das Modul deklarieren. Ich hoffe, das spart jemandem ein paar Stunden.
Wenn ich weglassen versuche
loader
ausjson-loader
Ich habe die folgenden Fehler auswebpack
:quelle
Versuchen Sie es so (aber beachten Sie auch, dass JavaScript keinen Zugriff auf das Client-Dateisystem hat):
quelle
Vor kurzem ist D3js in der Lage, lokale JSON-Dateien zu verarbeiten.
Dies ist das Problem https://github.com/mbostock/d3/issues/673
Dies ist der Patch, damit D3 mit lokalen JSON-Dateien funktioniert. https://github.com/mbostock/d3/pull/632
quelle
Dieser Thread wurde gefunden, als versucht wurde (erfolglos), eine lokale JSON-Datei zu laden. Diese Lösung hat bei mir funktioniert ...
... und wird so verwendet ...
... und das ist die
<head>
...quelle
In TypeScript können Sie mithilfe des Imports lokale JSON-Dateien laden. Zum Beispiel das Laden einer font.json:
Dies erfordert ein tsconfig-Flag --resolveJsonModule:
Weitere Informationen finden Sie in den Versionshinweisen von Typoskript: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html
quelle
In Angular (oder einem anderen Framework) können Sie mit http laden. Ich verwende es wie folgt:
Hoffe das hilft.
quelle
Ich habe die JSON-Datei ein wenig bearbeitet.
myfile.json
=>myfile.js
(Machen Sie es in der JSON-Datei zu einer JS-Variablen)
{name: "Whatever"}
=>var x = {name: "Whatever"}
Am Ende,
export default x;
Dann,
import JsonObj from './myfile.js';
quelle
Wenn Sie ein lokales Array für JSON verwenden - wie Sie in Ihrem Beispiel in der Frage (test.json) gezeigt haben, können Sie die
parseJSON()
Methode von JQuery -> verwendengetJSON()
wird zum Abrufen von JSON von einem Remotestandort verwendet - es funktioniert nicht lokal (es sei denn, Sie verwenden einen lokalen HTTP-Server).quelle
quelle
Ein Ansatz, den ich gerne verwende, besteht darin, den JSON mit einem Objektliteral aufzufüllen / zu verpacken und die Datei dann mit der Dateierweiterung .jsonp zu speichern. Diese Methode lässt auch Ihre ursprüngliche JSON-Datei (test.json) unverändert, da Sie stattdessen mit der neuen JSONP-Datei (test.jsonp) arbeiten. Der Name auf dem Wrapper kann beliebig sein, muss jedoch mit der Rückruffunktion identisch sein, die Sie zur Verarbeitung des JSONP verwenden. Ich werde Ihre test.json als Beispiel verwenden, um den Jsonp-Wrapper-Zusatz für die Datei 'test.jsonp' anzuzeigen.
Erstellen Sie als Nächstes eine wiederverwendbare Variable mit globalem Gültigkeitsbereich in Ihrem Skript, um den zurückgegebenen JSON zu speichern. Dadurch werden die zurückgegebenen JSON-Daten für alle anderen Funktionen in Ihrem Skript verfügbar und nicht nur für die Rückruffunktion.
Als nächstes kommt eine einfache Funktion, um Ihren JSON durch Skriptinjektion abzurufen. Beachten Sie, dass wir jQuery hier nicht verwenden können, um das Skript an den Dokumentkopf anzuhängen, da der IE die jQuery .append-Methode nicht unterstützt. Die im folgenden Code auskommentierte jQuery-Methode funktioniert in anderen Browsern, die die .append-Methode unterstützen. Es ist als Referenz enthalten, um den Unterschied zu zeigen.
Als nächstes folgt eine kurze und einfache Rückruffunktion (mit demselben Namen wie der jsonp-Wrapper), um die json-Ergebnisdaten in die globale Variable zu übertragen.
Auf die JSON-Daten kann jetzt von allen Funktionen des Skripts unter Verwendung der Punktnotation zugegriffen werden. Als Beispiel:
Diese Methode unterscheidet sich möglicherweise ein wenig von dem, was Sie gewohnt sind, hat aber viele Vorteile. Erstens kann dieselbe JSONP-Datei lokal oder von einem Server mit denselben Funktionen geladen werden. Als Bonus hat jsonp bereits ein domänenübergreifendes Format und kann auch problemlos mit APIs vom Typ REST verwendet werden.
Zugegeben, es gibt keine Fehlerbehandlungsfunktionen, aber warum sollten Sie eine benötigen? Wenn Sie mit dieser Methode nicht in der Lage sind, die JSON-Daten abzurufen, können Sie darauf wetten, dass Sie Probleme mit dem JSON selbst haben, und ich würde dies auf einem guten JSON-Validator überprüfen.
quelle
Sie können Ihren JSON in eine Javascript-Datei einfügen. Dies kann lokal (auch in Chrome) mit jQuery's geladen werden
getScript()
Funktion .map-01.js Datei:
main.js
Ausgabe:
Beachten Sie, dass die Variable json in der Datei js deklariert und zugewiesen ist.
quelle
Ich habe mit der Google Closure-Bibliothek keine Lösung gefunden. Um die Liste für zukünftige Besucher zu vervollständigen, laden Sie einen JSON aus der lokalen Datei mit der Closure-Bibliothek wie folgt:
quelle
Ich habe dies für meine Cordova-App getan, als hätte ich eine neue Javascript-Datei für den JSON erstellt und die JSON-Daten eingefügt und
String.raw
dann mit analysiertJSON.parse
quelle
JavaScript Object Notation
(JSON) verwenden:obj = [{"name": "Jeeva"}, {"name": "Kumar"}]
JSON.parse
, um es in ein JavaScript-Objekt zu konvertierenZunächst habe ich auf der Registerkarte "Netzwerk" den Netzwerkverkehr für den Dienst aufgezeichnet und auf dem Antworttext das JSON-Objekt kopiert und in einer lokalen Datei gespeichert. Rufen Sie dann die Funktion mit dem lokalen Dateinamen auf. Sie sollten das json-Objekt in jsonOutout oben sehen können.
quelle
Was für mich funktioniert hat, ist Folgendes:
Eingang:
Javascript Code:
quelle
Wenn Sie Python auf Ihrem lokalen Computer installiert haben (oder es Ihnen nichts ausmacht, einen zu installieren), finden Sie hier eine browserunabhängige Problemumgehung für das von mir verwendete lokale JSON-Dateizugriffsproblem:
Transformieren Sie die JSON-Datei in ein JavaScript, indem Sie eine Funktion erstellen, die die Daten als JavaScript-Objekt zurückgibt. Anschließend können Sie es mit dem <script> -Tag laden und die Funktion aufrufen, um die gewünschten Daten abzurufen.
Hier kommt der Python-Code
quelle