ebody: Wann JSON und wann ein Objekt nutzen?

Hallo,

ich möchte eine Klasse erstellen, die eine Methode enthält, um Daten von einer API zu laden. Die Klasse soll zudem Methoden zum Abfragen und Filtern dieser Daten haben.

Ich frage mich jetzt

  1. Was würde ein anderer Programmierer erwarten, in welcher Form (JSON oder Objekt) er diese Daten erhält, wenn er sie abfragt?
  2. Zudem, ob ich selbst im Script besser mit einem JSON oder Objekt arbeite?

Dazu muss ich vorab auch fragen, ist das wirklich JSON?:

let movies = [
  { "Title": "The Dark Knight", "Year": 2008 },
  { "Title": "Batman Begins", "Year": 2005 },
  { "Title": "The Dark Knight Rises", "Year": 2012 }
];

Oder wäre das JSON?

let movies = '[
  { "Title": "The Dark Knight", "Year": 2008 },
  { "Title": "Batman Begins", "Year": 2005 },
  { "Title": "The Dark Knight Rises", "Year": 2012 }
]';

Ich gehe davon aus, dass Ersteres auch ein JSON ist und habe mir von ChatGTP ein Script zum Testen erstellen lassen. Die Funktionen würden sowohl mit einem Objekt und dem JSON funktionieren.

Bzgl. Frage 2 wäre es also egal?

Wenn ich die Klasse erstelle und gefragt werde "Warum gibst du die Daten als Objekt und nicht als JSON wieder?" oder "Warum verendest du in der Klasse ein Objekt und nicht JSON" würde ich selbst gerne den Nutzen/Vorteil sehen, verstehen und damit auch erklären können.

Bisher sehe ich aber keinen Unterschied.

// JavaScript-Objekt
// let movies = [
//   { Title: "The Dark Knight", Year: 2008 },
//   { Title: "Batman Begins", Year: 2005 },
//   { Title: "The Dark Knight Rises", Year: 2012 }
// ];

// JSON
let movies = [
  { "Title": "The Dark Knight", "Year": 2008 },
  { "Title": "Batman Begins", "Year": 2005 },
  { "Title": "The Dark Knight Rises", "Year": 2012 }
];
// console.log(typeof movies);

// myJSON = '{"name":"John", "age":30, "car":null}';
// console.log(typeof myJSON);

// Funktion zum Finden des Elements mit dem Titel "Batman Begins"
function findMovieByTitle(title) {
  return movies.find(movie => movie.Title === title);
}

// Funktion zum Hinzufügen eines neuen Films
function addMovie(newMovie) {
  movies.push(newMovie);
}

// Funktion zum Löschen eines Films anhand des Titels
function deleteMovieByTitle(title) {
  movies = movies.filter(movie => movie.Title !== title);
}

// Beispiel für das Löschen eines Films
deleteMovieByTitle("Batman Begins");

// Aufruf der Funktion und Ausgabe des Ergebnisses
const batmanBegins = findMovieByTitle("Batman Begins");
if (batmanBegins) {
  console.log("Gefundener Film:", batmanBegins);
} else {
  console.log("Film nicht gefunden.");
}

// Aktualisierte Filme ausgeben
console.log("Aktualisierte Filme:", movies);

Gruß ebody

  1. Hi ebody, ersteinmal muss man schreiben das Instanzierung von Klassen nichts anderes ist als ein Objekt in JavaScript.

    Ein anderer Programmierer, der die Daten aus deiner Klasse abfragt, würde in der Regel erwarten, dass er die Daten in Form eines JavaScript-Objekts erhält. Dies liegt daran, dass JavaScript nativ mit Objekten arbeitet und es einfacher ist, auf Eigenschaften und Methoden von Objekten zuzugreifen.

    Wenn du Daten von einer API lädst, ist es üblich, dass diese Daten zunächst als JSON (JavaScript Object Notation) vorliegen, da JSON eine verbreitete Form ist, um Daten zwischen einem Server und einem Client zu übertragen. Du kannst diese JSON-Daten jedoch in JavaScript-Objekte umwandeln, um damit zu arbeiten.

    Es ist in der Regel am besten, mit JavaScript-Objekten zu arbeiten, sobald du die Daten geladen und verarbeitet hast. JavaScript-Objekte bieten eine einfache und flexible Möglichkeit, auf die Daten zuzugreifen und sie zu manipulieren. JSON wird eher als ein Format für den Datenaustausch betrachtet und wird häufig verwendet, wenn Daten zwischen Client und Server ausgetauscht werden.

    Ich frage mich, ob du überhaupt eine Klasse benötigst und wenn ja, wie man diese am besten für deine Bedürfnisse anpasst. Ein Klasse lohnt sich nur unter bestimmten Voraussetzung. Unter anderem wenn du die Klasse mehrfach instanziierst und damit mehrfach verwendest.

  2. @@ebody

    1. Was würde ein anderer Programmierer erwarten, in welcher Form (JSON oder Objekt) er diese Daten erhält, wenn er sie abfragt?

    Wenn es um Datenaustausch zwischen unabhängigen Teilen einer Anwendung oder gar zwischen eigenständigen Anwendungen geht, würde ich immer zu JSON raten. Und JSON.stringify() / JSON.parse() sind ja fix gemacht.

    Möglicherweise willst du irgendwann einmal einen Teil neu bauen und in einer anderen Programmiersprache implementieren. Gut, wenn dir der Datenaustausch dabei nicht im Wege steht. Entsprechende Methoden gibt’s ja in allen Sprachen.

    Oder du (oder jemand anderes) will(st) für die Daten noch eine weitere Anwendung implementieren. (Ich habe bspw. Daten in JSON(-LD). Eine mögliche Anwendung ist, die Daten in Tabellenform zu präsentieren (auf hinreichend breiden Viewports). Jemand mag eine andere Anwedung für die Daten haben.)

    Dazu muss ich vorab auch fragen, ist das wirklich JSON?

    let movies = [
      { "Title": "The Dark Knight", "Year": 2008 },
      { "Title": "Batman Begins", "Year": 2005 },
      { "Title": "The Dark Knight Rises", "Year": 2012 }
    ];
    

    Nein, das ist ein JavaScript-Objekt. JSON ist ein String.

    Oder wäre das JSON?

    let movies = '[
      { "Title": "The Dark Knight", "Year": 2008 },
      { "Title": "Batman Begins", "Year": 2005 },
      { "Title": "The Dark Knight Rises", "Year": 2012 }
    ]';
    

    Ja.

    Kwakoni Yiquan

    --
    Ad astra per aspera