Wie JSON Object entschachteln?

T

Tersus

Gast
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?

Grüße
 
Nein. ;-) Ich habe bereits ein JSON Objekt. Also sowas hier:

Code:
var json = {
  "Name" : "Josef Wissarionowitsch",
  "Geburtsdaten: " : {
    "Jahr" : "1878",
    "Monat" : 12,
    "Tag" : 18
  },
  "Geschlecht" : "m"
};

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. :)
 
Da wirst du dir wohl selber was schreiben müssen.

Ich verstehe den Sinn dahinter nicht ganz.
 
trialgod schrieb:
Ich verstehe den Sinn dahinter nicht ganz.

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'.

Nutze ich nur privat zu Übungszwecken.
 
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]));
}
 
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.

Danke euch!
 
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.
 
Zurück
Oben