Ich habe eine JSON-Datei in meinem lokalen System gespeichert und eine JavaScript-Datei erstellt, um die JSON-Datei zu lesen und Daten auszudrucken. Hier ist die JSON-Datei:
{"resource":"A","literals":["B","C","D"]}
Angenommen, dies ist der Pfad der JSON-Datei : /Users/Documents/workspace/test.json
.
Könnte mir bitte jemand helfen, einen einfachen Code zu schreiben, um die JSON-Datei zu lesen und die Daten in JavaScript zu drucken?
javascript
json
user2864315
quelle
quelle
Antworten:
Sie können eine lokale Ressource nicht mit AJAX aufrufen, da die Anforderung über HTTP erfolgt.
Eine Problemumgehung besteht darin, einen lokalen Webserver auszuführen, die Datei bereitzustellen und den AJAX-Aufruf an localhost durchzuführen.
Um Ihnen beim Schreiben von Code zum Lesen von JSON zu helfen, sollten Sie die Dokumentation lesen für
jQuery.getJSON()
:http://api.jquery.com/jQuery.getJSON/
quelle
python -m SimpleHTTPServer 8888
undhttp://localhost:8888/
in Ihrem Browser (Windows oder Mac) öffnen .8888
ist der Port und kann geändert werden.python -m http.server 8888
Um die externe lokale JSON-Datei (data.json) mit Javascript zu lesen, erstellen Sie zunächst Ihre Datei data.json:
Erwähnen Sie den Pfad der JSON-Datei in der Skriptquelle zusammen mit der Javascript-Datei.
Holen Sie sich das Objekt aus der JSON-Datei
Weitere Informationen finden Sie in dieser Referenz .
quelle
data.json
oben keine Validierung: jsonlint.com, da es sich wirklich um JavaScript handelt. Wenn Sie die einfachen Anführungszeichen löschen, wird daraus reines JavaScript.JSON.parse
Wird in einigen älteren Browsern nicht unterstützt (siehe IE). Weitere Informationen finden Sie in der Browserkompatibilitätstabelle von MDNwindow.JSON
.data
. Wenn Sie die Zeichenfolgen in der Umgebung des JSONs entfernendata.json
würden, müssten Sie sie nicht einmal verwendenJSON.parse
. Die Frage ist, wie eine JSON-Datei geladen wird und nicht, wie JSON in eine andere Javascript-Datei fest codiert und dann geladen wird.JSON.parse(window.data);
würde bessere Informationenscope
über diedata
Variable liefern .Das Laden einer
.json
Datei von der Festplatte ist eine asynchrone Operation und muss daher eine Rückruffunktion angeben, die nach dem Laden der Datei ausgeführt werden soll.Diese Funktion funktioniert auch zum Laden von a
.html
oder.txt
Dateien, indem der Parameter mime type to usw. überschrieben"text/html"
wird"text/plain"
.quelle
rawFile.responseType = 'json';
so dass es das JSON - Objekt analysiert automatisch, nur um sicher zu machen passieren ,rawFile.response
anstattrawFile.responseText
auf den Rückruf.Wenn in Node.js oder wenn require.js im Browser verwenden , können Sie einfach tun:
Beachten Sie: Die Datei wird einmal geladen, nachfolgende Aufrufe verwenden den Cache.
quelle
'utf8'
Argument zureadFileSync
: Dadurch wird nicht einBuffer
(obwohlJSON.parse
damit umgehen kann), sondern ein String zurückgegeben. Ich erstelle einen Server, um das Ergebnis zu sehen ...localhost:3030/get/33
haben, werden die Details zu dieser ID angezeigt ... und Sie lesen auch mit Namen. Meine JSON-Datei hat ähnliche Namen. Mit diesem Code können Sie Details zu einem Namen abrufen. Es wurden nicht alle ähnlichen Namen gedrucktquelle
Die Verwendung der Fetch-API ist die einfachste Lösung:
Es funktioniert perfekt in Firefox, aber in Chrome müssen Sie die Sicherheitseinstellungen anpassen.
quelle
Wie bereits erwähnt, funktioniert dies mit einem AJAX-Aufruf nicht. Es gibt jedoch einen Weg, dies zu umgehen. Mit dem Eingabeelement können Sie Ihre Datei auswählen.
Die ausgewählte Datei (.json) muss folgende Struktur haben:
Dann können Sie die Datei mit JS mit FileReader () lesen:
quelle
Abhängig von Ihrem Browser können Sie auf Ihre lokalen Dateien zugreifen. Dies funktioniert jedoch möglicherweise nicht für alle Benutzer Ihrer App.
Zu diesem Zweck können Sie die Anweisungen hier ausprobieren: http://www.html5rocks.com/en/tutorials/file/dndfiles/
Sobald Ihre Datei geladen ist, können Sie die Daten abrufen mit:
quelle
Wenn Sie lokale Dateien verwenden, packen Sie die Daten einfach als js-Objekt.
data.js
Keine XMLHttpRequests , keine Analyse, nur
MyData.resource
direkt verwendenquelle
Sehr einfach.
Benennen Sie Ihre JSON-Datei in ".js" anstelle von ".json" um.
Folgen Sie also Ihrem Code normal.
Nur zur Information, der Inhalt meines json sieht aus wie der Snip unten.
quelle
Sie können es wie ein ES6-Modul importieren.
quelle
Verwenden Sie einfach $ .getJSON und dann $ .each, um das Paar Schlüssel / Wert zu iterieren. Inhaltsbeispiel für die JSON-Datei und den Funktionscode:
quelle
Sie können die XMLHttpRequest () -Methode verwenden:
Sie können die Antwort von myObj mithilfe der Anweisung console.log sehen (auskommentiert).
Wenn Sie AngularJS kennen, können Sie $ http verwenden:
Wenn Sie die Datei in einem anderen Ordner haben, geben Sie den vollständigen Pfad anstelle des Dateinamens an.
quelle
Da Sie eine Webanwendung haben, haben Sie möglicherweise einen Client und einen Server.
Wenn Sie nur Ihren Browser haben und eine lokale Datei aus einem Javascript lesen möchten, das in Ihrem Browser ausgeführt wird, bedeutet dies, dass Sie nur einen Client haben. Aus Sicherheitsgründen sollte der Browser dies nicht zulassen.
Wie Lauhub oben erklärt hat, scheint dies jedoch zu funktionieren:
http://www.html5rocks.com/de/tutorials/file/dndfiles/
Eine andere Lösung besteht darin, irgendwo auf Ihrem Computer einen Webserver einzurichten (winzig in Windows oder Monkey in Linux) und mit einer XMLHttpRequest- oder D3-Bibliothek die Datei vom Server anzufordern und zu lesen. Der Server ruft die Datei aus dem lokalen Dateisystem ab und stellt sie Ihnen über das Web zur Verfügung.
quelle
Mir hat gefallen, was Stano / Meetar oben kommentiert hat. Ich benutze es, um .json-Dateien zu lesen. Ich habe ihre Beispiele mit Promise erweitert. Hier ist der Plunker dafür. https://plnkr.co/edit/PaNhe1XizWZ7C0r3ZVQx?p=preview
Das Lesen von JSON kann für DRY in eine andere Funktion verschoben werden. Das Beispiel hier zeigt jedoch eher, wie man Versprechen einsetzt.
quelle
Sie müssen eine neue XMLHttpRequest-Instanz erstellen und den Inhalt der JSON-Datei laden.
Dieser Tipp funktioniert für mich ( https://codepen.io/KryptoniteDove/post/load-json-file-locally-using-pure-javascript ):
quelle
Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https
. Sie können json2js verwenden , um eine beliebige JSON-Datei in eine JS-Datei zu konvertieren.Eine einfache Problemumgehung besteht darin, Ihre JSON-Datei auf einem lokal ausgeführten Server abzulegen. Gehen Sie dazu vom Terminal in Ihren Projektordner und starten Sie den lokalen Server an einer Portnummer, z. B. 8181
Wenn Sie dann zu http: // localhost: 8181 / navigieren, sollten alle Ihre Dateien einschließlich des JSON angezeigt werden. Denken Sie daran, Python zu installieren, falls Sie dies noch nicht getan haben.
quelle
Wenn Sie einen lokalen Webserver ausführen könnten (wie oben von Chris P vorgeschlagen) und jQuery verwenden könnten, könnten Sie http://api.jquery.com/jQuery.getJSON/ ausprobieren.
quelle
Sie können D3 verwenden, um den Rückruf zu verarbeiten und die lokale JSON-Datei
data.json
wie folgt zu laden :quelle
Ich nahm Stanos ausgezeichnete Antwort und wickelte sie in ein Versprechen ein. Dies kann nützlich sein, wenn Sie keine Option wie Node oder Webpack haben, auf die Sie zurückgreifen können, um eine JSON-Datei aus dem Dateisystem zu laden:
Sie können es so nennen:
quelle
Wenn Sie also planen, "Apache Tomcat" zum Hosten Ihrer JSON-Datei zu verwenden,
1> Überprüfen Sie nach dem Starten des Servers, ob Ihr Apache Tomcat betriebsbereit ist, indem Sie zu dieser URL gehen: "localhost: 8080" -
2> Wechseln Sie als Nächstes zum Ordner "webapps" - "C: \ Programme \ Apache Software Foundation \ Tomcat 8.5 \ webapps". Erstellen Sie einen Projektordner oder kopieren Sie Ihren Projektordner.
3> Fügen Sie dort Ihre JSON-Datei ein.
4> Und das war's. Du bist fertig! Gehen Sie einfach zu - " http: // localhost: 8080 / $ project_name $ / $ jsonFile_name $ .json"
quelle