Java FX JsonObjekt Children auslesen

Diskutiere JsonObjekt Children auslesen im Allgemeine Java-Themen Forum; Hallo liebes Forum, ich hab folgenden Java Code: public void generatejson(File file, Object stage) { try { JSONObject object =...

  1. iso66
    iso66 Neues Mitglied
    Hallo liebes Forum,

    ich hab folgenden Java Code:
    Code (Java):
       
    public void generatejson(File file, Object stage) {

           
        try {
            JSONObject object = (JSONObject) new JSONParser().parse(new FileReader(file));
               
            JSONObject child = new JSONObject();
            child.get(child);
               
            for(int i=0;i<child.size(); i++){
                @SuppressWarnings("unused")
                JSONArray children= (JSONArray) child.get(i);
                System.out.println("Kind1 Children\n" + child);
            }
               
               
            } catch (Exception e) {
                e.printStackTrace();
       
            }
            // This implies that the first token in JsonToken.BEGIN_OBJECT, which is always true.
            // handleObject(reader);

        }
     
    Mein Problem ist, ich will die Kinder von dem JsonObjekt, den ich in Line 6 erstelle habe, Rekursiv und einzeln an meiner Console anzeigen lassen. Also am Anfang nur die Kinder, danach die Kindes Kinder.
    Ich glaube, dass ich ab Line 8 - 16 nicht ganz richtig ist, weil die geöffnete Json-Datei nebeneinander auf meiner Console angezeigt wird.

    Bitte um Hilfe.
     
  2. Vielleicht hilft dir dieser Kurs hier weiter --> (hier klicken)
  3. dzim
    dzim Bekanntes Mitglied
    Falsches Unterforum, aber ich antworte mal trotzdem :)

    So. Also. Naja, für Rekursion brauchst du auch eine sich wieder selbst aufrufende Methode, oder? ;-)

    Erster Fehler:
    Zeile 9
    child.get(child);

    Ich denke du willst
    JSONObject child = object.getJSONObject("my-object"); // ersetze "my-object" mit einem richtigen Namen

    Frage meinerseits: Hat das Json ein festes Format? Wird es immer das Gleiche sein? Wenn ja, verwende einen Objektrelationalen Mapper wie jackson, gson oder so.
    Vorteil: Du erhälst ordentliche Java-Beans. Musst dich also nicht so "Low-Level" durch den Json-Baum hangeln.
    Nachteil: Etwas höherer Memory-Footprint (glaube ich zumindest) und "nicht so flexibel". Manchmal genügt dein Ansatz, aber ich mach das nur im "Notfall".
     
    MattElg gefällt das.
  4. iso66
    iso66 Neues Mitglied
    Danke für deine Antwort Dzim,
    Ich hab es nun so gemacht Dzim:
    Code (Java):

    try {
                JSONObject parent = (JSONObject) new JSONParser().parse(new FileReader(file));

                // First Key zeigt die Parents an
                for (Object key : parent.keySet()) {
                    System.out.println(key);

                    JSONObject child1 = (JSONObject) parent.get(key); // Show Parent keys

                    // Second Key key2:child1 first child -->
                    for (Object key2 : child1.keySet()) {
                        System.out.println("    " + key2);

                        Object child2 = child1.get(key2); // Child 2 kommt unter child 1

    }
    }
    }
     
    So lass ich mir den Tree, schritt für schritt an der Console ausgeben, jedoch wie du gemeint hast, was fehlt ist Rekursiv Methode.

    Ich habe einen festes Format, jedoch wird es nicht immer das selbe Json-Format sein.
    Hab mir auch überlegt ob ich den Jackson Mapper nehmen soll, ist es besser?
     
  5. dzim
    dzim Bekanntes Mitglied
    Besser... Darüber lässt sich streiten. Einfacher? Auf jeden Fall. Du wirst das Format nicht alle Nase lang ändern (ausser vielleicht in der Design-Phase), somit ist es langfristig einfacher. Und Im Code ist dir auch immer schneller klar, was wo und warum passiert.

    Bezüglich der Rekursion: Rekursion ist nicht, Schleifen zu schachteln! Rekursion ist, wenn sich eine Methode selbst aufruft - und idealerweise gemäss Divide & Conquer - ein Problem zerlegt und verarbeitet.

    Unfertiger Java-Pseudo-Code sähe in etwa so aus (aus dem Gedächtnis, keine Lust zu Ende zu schreiben :-D )
    [code=Java]
    private void callPrintJson(JSONObject root) {
    printJson(0, root);
    }

    private void printJson(int level, JSONObject node) {
    for (String key : node.keySet()) {
    if (value == (String||boolean||double||long||int)) { // pseudo code
    // print
    } else if (value == JSONObject) {
    printJson(level+1, value);
    } else if (value == JSONArray) {
    // iterate over values,
    // if JSONObject: printJson(level+1, value);
    }
    }
    }
    [/code]

    Etwa klar, was ich meine?
     
  6. iso66
    iso66 Neues Mitglied
    Guten morgen Dzim ,

    hab mal ne frage wieso nimmst du in dem Code Oben printJson, hat dies einen besonderen Anlass?
     
  7. dzim
    dzim Bekanntes Mitglied
    Nope. Wollte erst eine rekursive #toString-Methode machen, war mir dann abends aber doch zu viel und ich hab sie nur nicht umbenannt... :)
     
  8. iso66
    iso66 Neues Mitglied
    Achso,ich hab wie ein verrückter im Google, danach gesucht.
    :lol:
     
  9. iso66
    iso66 Neues Mitglied
    Guten morgen,
    ich hab folgenden Code:
    Code (Java):
    public class Convert{

    public void generatejson(File file, Object stage) {
           
           
            try {
                JSONObject parent = (JSONObject) new JSONParser().parse(new FileReader(file));
               
               
                // First Key zeigt die Parents an
                for (Object key : parent.keySet()) {
                    System.out.println(key);

                    JSONObject child1 = (JSONObject) parent.get(key); // Show Parent keys

                    // Second Key key2:child1 first child -->
                    for (Object key2 : child1.keySet()) {
                        System.out.println("    " + key2);

                        Object child2 = child1.get(key2); // Child 2 kommt unter child 1

                        // Laufzeitüberprüfung prüfung ob kombatibel ist.
                        if (child2 instanceof JSONObject) {
                            JSONObject child2a = (JSONObject) child2;
                        } else if (child2 instanceof String) {
                            System.out.println("    " + "       " + child2);
                        }
                    }

                }
    }
    }
    }
     
    Ich bekomme diesen Code, nicht Rekursive, könntet ihr mir bitte helfen bin am verzweifeln.
     
  10. dzim
    dzim Bekanntes Mitglied
    Bin verwirrt: Was willst du mit dem Code erreichen? JSON generieren (Java->JSON, der Name der Methode suggeriert das), oder parsen (also JSON->Java)?
     
  11. iso66
    iso66 Neues Mitglied
    JSON -> Java, will ich generieren.
     
Die Seite wird geladen...

JsonObjekt Children auslesen - Ähnliche Themen

Panes wie "children" anordnen
Panes wie "children" anordnen im Forum AWT, Swing, JavaFX & SWT
Szenegraph - Koordinaten von Children einer Group
Szenegraph - Koordinaten von Children einer Group im Forum AWT, Swing, JavaFX & SWT
Children
Children im Forum AWT, Swing, JavaFX & SWT
.xsd: Unbestimmte Anzahl an Children
.xsd: Unbestimmte Anzahl an Children im Forum XML und Co.
JDOM - aus Children-Liste ein Child direkt ansprechen ohne XPath?
JDOM - aus Children-Liste ein Child direkt ansprechen ohne XPath? im Forum XML und Co.
Thema: JsonObjekt Children auslesen