Parsen von Json in Node.js

Isaac Tony 30 März 2022
Parsen von Json in Node.js

In diesem Abschnitt lernen wir, JSON synchron in Node.js zu parsen. Das Analysieren von JSON-Daten kann als Prozess des Interpretierens von JSON-Daten in einer bestimmten Sprache bezeichnet werden, die Sie möglicherweise derzeit verwenden.

JSON-Daten werden häufig in Schlüssel-Wert-Paaren als Zeichenfolgewerte gespeichert, die in Anführungszeichen eingeschlossen sind, während sie dennoch den JSON-Spezifikationen folgen. JSON-Daten, die vom Server empfangen oder von einer API zurückgegeben werden, liegen häufig im Zeichenkettenformat vor. In diesem Rohformat sind JSON-Daten nicht leicht lesbar und zugänglich und müssen daher in eine benutzerfreundlichere Form konvertiert werden.

Es gibt drei Hauptmethoden, mit denen wir JSON-Dateien in Node js parsen können. Für lokale Dateien, d. h. solche, die sich in Ihrem lokalen Computerspeicher befinden, können wir die Funktion require() verwenden, die zum Laden von Modulen in die Node js-Umgebung verwendet wird. Diese Methode ist jedoch synchron, was bedeutet, dass dieses Programm nichts anderes ausführt, bis die aktuelle Datei vollständig analysiert wurde.

[
    {
      "id": 0,
      "name": "Maribel Andrews"
    },
    {
      "id": 1,
      "name": "Gilliam Mcdonald"
    },
    {
      "id": 2,
      "name": "Lisa Wright"
    }
  ]
const friends  = require("./friends.json");
 
console.log(friends);

Beispielausgabe:

[
  { id: 0, name: 'Maribel Andrews' },
  { id: 1, name: 'Gilliam Mcdonald' },
  { id: 2, name: 'Lisa Wright' }
]

Dieses Programm ist nicht für die Arbeit mit dynamischen Programmen geeignet, sondern mit statischen Dateien. Programme, die die Daten ändern können, würden von uns verlangen, die Daten erneut zu parsen, sobald eine Änderung vorgenommen wurde. Dies ist nicht die beste Methode zum Analysieren von JSON-Dateien.

Alternativ könnten wir das Modul fs und fs.readFileSync() verwenden, um die JSON-Datei zu laden, anstatt sie als Modul zu laden. Das fs-Modul ist eine effizientere Möglichkeit, Dateioperationen wie das Lesen von Dateien, Umbenennen und Löschen durchzuführen. Das fs.readFileSync() ist eine Schnittstelle, die es uns ermöglicht, die Datei und ihren Inhalt synchron zu lesen.

[
    {
      "id": 0,
      "name": "Maribel Andrews"
    },
    {
      "id": 1,
      "name": "Gilliam Mcdonald"
    },
    {
      "id": 2,
      "name": "Lisa Wright"
    }
  ]
const fs = require("fs");
 
const friends = fs.readFileSync("./friends.json");
 
 
console.log(friends);

Beispielausgabe:

<Buffer 5b 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 22 69 64 22 3a 20 30 2c 0d 0a 20 20 20 20 20 20 22 6e 61 6d 65 22 3a 20 22 4d 61 72 69 62 65 6c 20 41 ... 144 more bytes>

Obwohl wir die JSON-Datei erfolgreich geladen haben, haben wir das Codierungsformat nicht angegeben. Die Methode readFileSync() gibt den Rohpuffer zurück, wenn der Codierungsparameter nicht angegeben ist, d. h. wenn er null ist. Das Kodierungsformat von Textdateien ist in der Regel utf-8.

const fs = require("fs");
 
const friends = fs.readFileSync("./friends.json", {encoding: 'utf-8'});
 
console.log(friends);

Beispielausgabe:

[
    {
      "id": 0,
      "name": "Maribel Andrews"
    },
    {
      "id": 1,
      "name": "Gilliam Mcdonald"
    },
    {
      "id": 2,
      "name": "Lisa Wright"
    }
  ]

Nachdem wir die JSON-Datei erfolgreich gelesen haben, können wir die JSON-Zeichenfolge in ein JSON-Objekt parsen. Wir können dies mit der Funktion JSON.parse() tun. Dies ist eine Javascript-Funktion, mit der wir den JSON-String in ein Objekt konvertieren können.

Diese Funktion akzeptiert zwei Parameter: die zu analysierende JSON-Zeichenfolge und einen optionalen Parameter, der als Reviver bekannt ist. Wenn der Reviver-Parameter eine Funktion ist, gibt er laut mozilla.org an, wie der ursprünglich geparste Wert transformiert wird.

const fs = require("fs");
 
const friends = fs.readFileSync("./friends.json", {encoding: 'utf-8'});
 
const parsed_result = JSON.parse(friends);
 
 
console.log(parsed_result);

Ausgabe:

[
  { id: 0, name: 'Maribel Andrews' },
  { id: 1, name: 'Gilliam Mcdonald' },
  { id: 2, name: 'Lisa Wright' }
]

In diesem Abschnitt werden wir sehen, wie ein JSON-String asynchron analysiert wird. In den vorherigen Beispielen haben wir uns angesehen, wie wir JSON-String-Daten synchron parsen können. In Node js gilt das Schreiben von synchronen Funktionen jedoch als schlecht, insbesondere wenn die Daten groß sind.

Wir können JSON-String-Daten mit der Methode fs.readFile() in ein JSON-Objekt parsen und Funktionen zurückrufen.

Es garantiert, dass der Rest des Programms ausgeführt wird, während die Daten im Hintergrund abgerufen werden, wodurch unnötige Wartezeiten für das Laden der Daten reduziert werden.

const fs = require('fs');
 
fs.readFile('./friends.json',{encoding: 'utf-8'}, (err, data) => {
  if (err) console.error(err);
  const parsed_data  = JSON.parse(data);
 
  console.log(parsed_data);
});
 
console.log("Rest of the program that needs to be executed!");

Beispielausgabe:

Rest of the program that needs to be executed!
[
  { id: 0, name: 'Maribel Andrews' },
  { id: 1, name: 'Gilliam Mcdonald' },
  { id: 2, name: 'Lisa Wright' }
]

Obwohl diese Methode beim Arbeiten mit großen Datenmengen die bessere Option zu sein scheint als die zuvor besprochenen synchronen Methoden, ist sie es nicht. Wenn wir Daten aus einer externen Quelle haben, müssen wir die Daten ständig neu laden, wenn neue Änderungen vorgenommen wurden; Dies ist das gleiche Szenario, wenn Sie mit den synchronen Methoden arbeiten. Die native Node js-Stream-APIS ist die empfohlene Alternative, wenn Sie mit großen externen Daten arbeiten.

Autor: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn