Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Abend,
ich bekomme einige JSON Objekte und suche eine "Klasse" in JavaScript, die mir das verschachtelte Objekt auflöst und mir die einzelnen Objekte zurück gibt.
Gibt es sowas oder muss ich mir da selbst die Mühe machen und eine Logik entwickeln?
Ich suche eine Funktion, die mir das Ding in ein Array umwandelt, so dass ich es wie folgt nutzen kann.
Code:
var array = konverter(json);
array[0]; // enthält Namen und Geschlecht
array[1]; // enthält Jahr, Monat und Tag
Wichtig hierbei. Die funktion darf nicht rekursiv arbeiten. Wenn die nächst tiefere Schicht, also hier "Geburtsdaten" weiter verschachtelt ist, so wird dies nicht aufgelöst. Könnte der selben funktion aber wieder übergeben werden, um eine Ebene tiefer aufzulösen.
Die Sache ist Folgende. Ich habe keinerlei praktische Erfahrung und kein theoretisches Wissen über die Art und Weise, wie man mein Vorhaben sinnvoll realisiert.
Ich versuche mir so ziemliche alles selbst beizubringen.
Mir wurde eine Schnittstelle zur Verfügung gestellt, auf die ich keinen Einfluss habe. Diese liefert mir JSON Objekte und die enthaltenen Daten möchte ich in eine Datenbank einbetten.
Dazu möchte ich verschachtelte JSON Objekte entschachteln, um die einzelnen Elemente entsprechend in meine Datenbanktabelle zu überführen.
Bei meinem Beispiel oben wären das also 'Person' und 'Geburtsdatum'.
Nein, kein node.js. Ist eine offline SQLite Datenbank.
Hat zum Beispiel die Tabellen:
Person(...) -> Geburtsdaten (...) -> Monate(...).
PKey von Monate als FKey in Geburtsdaten und dessen PKey als FKey in Person, als Beispiel.
Mein JSON Object welches ich bekomme, würde also 2 Level tiefer gehen, weil es von der entsprechenden Person die Geburtsdaten vollständig enthält und diese wiederrum die Monate.
Man stelle sich vor, eine Person hätte eine Beziehung zu einer Tabelle (vllt. Kleidungsstücke) mit höherer Kardinalität. Da wären alle Kleidungsstücke mit im JSON Object.
Um die einzelnen Unterlevel in die richtigen Tabellen zu über führen, musa das JSON Object doch zerpflückt werden.
Ich habe schon eine Lösung dafür, aber die ist halt der Zeitaufwendig.
Ich versteh immer noch nicht, warum du ein Array draus machen willst. Arrays in JS sind, verglichen mit Arrays in anderen Sprachen, extrem eingeschränkt. JS-Arrays haben ausschließlich numerische Indizes. Es gibt kein Äquivalent zu den doch viel eleganteren assoziativen Arrays anderer Sprachen (z.B. PHP). Und genau deshalb lohnt es sich nicht, das aus dem JSON-String erzeugte Objekt in ein Array zu parsen: Du würdest dir nur die Pest an den Hals hängen.
Was spricht denn gegen:
var objPerson = JSON.parse(deinString);
var name = objPerson.name;
var birthdate = objPerson.Geburtsdatum; // da dein Geburtsdatum ja im Beispiel auch ein Objekt...
Was spricht denn gegen:
var objPerson = JSON.parse(deinString);
var name = objPerson.name;
var birthdate = objPerson.Geburtsdatum; // da dein Geburtsdatum ja im Beispiel auch ein Objekt...
Daran anknüpfend (vielleicht habe ich dich jetzt richtig verstanden?):
wenn du, wie in deinem genannten Beispiel mit Person und Kleidungsstücken, in einem JSON-Objekt "Person" mehrere Unter-Objekte vom Typ "Kleidungsstück" hast, kannst du diese auch ganz normal mit einer Schleife durchlaufen. Also:
PHP:
var person = JSON.parse(personString);
var kleidung = [];
for (var i=0; i<person.Kleidungsstücke.length; i++) {
kleidung.push(person.Kleidungsstücke[i]));
}
Kleiner Hinweis zu deiner for-Schleife: In modernen Browsern (>= IE9) ist so etwas nicht mehr nötig. Arrays haben jetzt eine forEach-Funktion. https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
Man kann natürlich auch auf Frameworks wie jQuery zurück greifen, dann haste halt $(deinArray).each(callbackFunc()), was wiederum selbständig herausfindet, ob der Browser die neue forEach-Lösung beherrscht.
Ja, so ungefähr mache ich es auch im Moment, abgesehen davon, dass ich nicht mehr parsen brauche, weil mir das Objekt bereits als solches vorliegt und nicht in Textform.
Nur noch mal am Rande, weil ich das selber schon erlebt habe.
Es macht KEINEN Sinn Tabellen wie "Jahre", "Monate", "Daten" oder sonstwas zu haben. Denn dafür gibt es DateTime Spalten in den jeweiligen Datenbanksystemen. Alle Abfragen kannst du auf das Datum machen.