Wie kann ich in Javascript eine externe JSON File auslesen und verändern?

1 Antwort

Du kannst mittels fetch einen Request an die Datei abschicken.

fetch("url-to-json-file")
  .then(function(response) {
    return response.json();
  })
  .then(function(data) {
    console.log(data); // <<< file content
  })
  .catch(function(error) {
    console.error(error);
  });

Wenn er fehlschlägt, könnte es an CORS liegen. Dann solltest du den Request stattdessen von Serverseite aus starten.

AllesKaese3 
Fragesteller
 18.01.2021, 19:12

Ich habe eine lokale status.json, die ich fetchen will.

fetch("file:///C:/Users/ole/client/status.json")
  .then(function(response) {
    return response.json();
  })
  .then(function(data) {
    console.log(data); // <<< file content
  })
  .catch(function(error) {
    console.error(error);
  });

So gibt Chrome mir aber die Fehlermeldung

file:///C:/Users/ole/client/status.json. URL scheme must be "http" or "https" for CORS request.
Und:
updatestatus.js:9 TypeError: Failed to fetch
(anonymous) @ updatestatus.js:9
Promise.catch (async)
(anonymous) @ updatestatus.js:8

Ich verstehe das zwar, aber ich weiß nicht wie ich das beheben kann. Das gibt er mir bei jeder Website, zum Beispiel auch http://www.time.jsontest.com

Oder er gibt mir den Fehler

GET http://www.time.jsontest.com/ net::ERR_NAME_NOT_RESOLVED

und die Sache mit failed to fetch. Und die URL http://www.time.jsontest.com/ gibt es sehr wohl, sie im Browser zu öffnen funktioniert Problemlos.

WEnn du noch da bist und mir antworten willst: Es ist für das Projekt nicht wichtig, externe .json files (aus einer URL) zu fetchen sondern nur eine lokale, die im gleichen verzeichnis wie die .js Datei liegt.

Vielen Dank im Vorraus!!

0
regex9  18.01.2021, 19:29
@AllesKaese3

Deine Webseite muss in jedem Fall von einem Webserver ausgespielt werden. Anderfalls wird dein Browser den Request blocken.

Dieser Aufruf:

fetch("file:///C:/Users/ole/client/status.json")

darf also auch nicht über file:/// laufen, sondern muss über http://localhost/... erfolgen.

Einen Webserver kannst du dir schnell und einfach installieren. Zwei Optionen:

a) Du installierst dir das Softwarepaket XAMPP (Datenbank und Mailserver brauchst du nicht). Im Control Panel startest du den Apache Webserver, deine Webseite legst du in den htdocs-Ordner (im XAMPP-Installationsverzeichnis). Dieser Ordner ist der Root, d.h. http://localhost/ zeigt genau auf diesen Ordner. Angenommen, deine HTML-Datei heißt index.html (und sie liegt wie gesagt in htdocs), wäre der Aufruf dann: http://localhost/index.html. Deine status.json würde ich in den gleichen Ordner packen, um es einfach zu halten.

b) Du installierst dir den IIS (Anleitung; Voraussetzung ist also ein Windows OS). Das Stammverzeichnis wird auf der Seite erwähnt, das weitere Prinzip wäre wie bei a), nur dass der Ordner wwwroot heißt, statt htdocs.

Die time.jsontest-Seite kann ich bei mir nicht öffnen.

0
AllesKaese3 
Fragesteller
 18.01.2021, 19:31
@regex9

ja. Den IIS Server habe ich schon mal vor geraumer zeit installiert.

0
AllesKaese3 
Fragesteller
 18.01.2021, 19:33
@regex9

Jetzt bekkomme ich das:

Access to fetch at 'http://localhost/data/status.json' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
updatestatus.js:1 GET http://localhost/data/status.json net::ERR_FAILED
(anonymous) @ updatestatus.js:1
auswahl.html:1 Uncaught (in promise) TypeError: Failed to fetch
Promise.then (async)
(anonymous) @ updatestatus.js:5
0
regex9  18.01.2021, 19:35
@AllesKaese3

Lies dir mal die komplette Fehlermeldung durch und vergleiche mit dem, was ich bereits geschrieben habe.

0