Formatierung v. JSON File

Trèfle

Mitglied
Hallo Freunde der Sonne,

ich muss für die Arbeit ein JSON-File exportieren. Verstehe soweit die Funktionen die JAVA dazu anbieten, inhaltlich ist das generierte File scheinbar auch korrekt. Nur mit der Formattierung bekomme ich es nicht ganz so hin wie es sein soll.

Mein Code sieht so in der Richtung aus:

Code:
import java.io.FileWriter;
import java.io.IOException;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

class Experimente {

    public static void main(String[] args) {
        try {
            
            JSONArray Personenliste = new JSONArray();
            
            JSONObject person1 = new JSONObject();
            person1.put("vorname","Roman");
            person1.put("nachname","Tisch");
            person1.put("adresse", "Sackgasse 1, Musterhausen");
            
            JSONObject sprachen1 = new JSONObject();
            sprachen1.put("Fremdsprache 1","English");
            sprachen1.put("Fremdsprache 2","Spanisch");
            
            person1.put("fremdsprachen",sprachen1);
            
            JSONObject person2 = new JSONObject();
            person2.put("vorname","Sergej");
            person2.put("nachname","Fährlich");
            person2.put("adresse", "Musterstraße 1, Boring");
            
            JSONObject sprachen2 = new JSONObject();
            sprachen2.put("Fremdsprache 1","English");
            sprachen2.put("Fremdsprache 2","Russisch");
            
            person2.put("fremdsprachen",sprachen2);
            
            Personenliste.put(person1);
            Personenliste.put(person2);
            
            JSONObject endErgebnis = new JSONObject();
            endErgebnis.put("Personenliste", Personenliste);
            
            String speicherort = "C:\\Users\\QXX7806\\Personenliste.json";
            
            try (FileWriter file = new FileWriter(speicherort)) {
                
                file.write(endErgebnis.toString());
                file.flush();
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
}

Wenn ich die Datei dann öffne sieht das ganze so aus:

{"Personenliste":[{"fremdsprachen":{"Fremdsprache 2":"Spanisch","Fremdsprache 1":"English"},"vorname":"Roman","adresse":"Sackgasse 1, Musterhausen","nachname":"Tisch"},{"fremdsprachen":{"Fremdsprache 2":"Russisch","Fremdsprache 1":"English"},"vorname":"Sergej","adresse":"Musterstraße 1, Boring","nachname":"Fährlich"}]}

Folgende Dinge stöhren mich:

Zum einen sind die Attribute nicht in der Reihenfolge vorhanden in der ich sie im Code hinzufüge. Ich bräuchte das wirklich in der Korrekten Reihenfolge, also in diesem Fall 1) vorname, 2) nachname, 3) adresse, 4) fremdsprachen

Weiterhin ist stöhrend, dass alles in derselben Zeile ist. Es müsste jedes mal wenn ein neues Objekt/eine neue Liste/ein neues Attribut kommt ein Zeilenumbruch stattfinden. Am besten auch mit einrückung, so dass gleichwertige Objekte auf derselben Höhe sind. So soll das ganze idealerweise aussehen:
{
"Personenliste":[
{
"vorname":"Roman",
"nachname":"Tisch",
"adresse":"Sackgasse 1, Musterhausen",
"fremdsprachen":{
"Fremdsprache 1":"English",
"Fremdsprache 2":"Spanisch"
},
},
{
"vorname":"Sergej",
"nachname":"Fährlich",
"adresse":"Musterstraße 1, Boring",
"fremdsprachen":{
"Fremdsprache 1":"English",
"Fremdsprache 2":"Russisch"
}
}
]
}

Ich würde mich freuen, wenn mir jemand helfen kann. Bedanke mich auch recht herzlich im Vorraus.

Liebe Grüße, Andy
 

httpdigest

Top Contributor
JSONObject hat ein toString(int) für das Pretty-Printing: https://github.com/stleary/JSON-java/blob/master/JSONObject.java#L2288
Was die Reihenfolge der Properties angeht: Properties innerhalb eines JSON-Objektes haben keine Reihenfolge und dein Code sollte keine Annahmen über eine Reihenfolge treffen.
Wenn du definitiv eine Reihenfolge brauchst, nutze ein JSON Konstrukt, das eine Reihenfolge kennt, z.B. ein JSON Array und speichere dort Key-Value Paare.
 

mihe7

Top Contributor
Properties innerhalb eines JSON-Objektes haben keine Reihenfolge und dein Code sollte keine Annahmen über eine Reihenfolge treffen.
Diese einfache Tatsache durfte ich mal in einem Gespräch, das gefühlt eine Ewigkeit dauerte, einem "Web Developer" und einem Spec Lead erklären. Sie haben es am Ende zwar akzeptiert, wirklich verstanden haben sie das Problem aber nicht...
 
X

Xyz1

Gast
Du brauchst so etwas

Code:
{"Personenliste":[[{"fremdsprachen":[{"Fremdsprache 1":"English"},{"Fremdsprache 2":"Spanisch"}]},{"vorname":"Roman"},{"nachname":"Tisch"},{"adresse":"Sackgasse 1, Musterhausen"}],
[{"fremdsprachen":[{"Fremdsprache 1":"English"},{"Fremdsprache 2":"Russisch"}]},{"vorname":"Sergej"},{"nachname":"Fährlich"},{"adresse":"Musterstraße 1, Boring"}]]}


Java:
{
  "Personenliste": [
    [
      {
        "fremdsprachen": [
          {
            "Fremdsprache 1": "English"
          },
          {
            "Fremdsprache 2": "Spanisch"
          }
        ]
      },
      {
        "vorname": "Roman"
      },
      {
        "nachname": "Tisch"
      },
      {
        "adresse": "Sackgasse 1, Musterhausen"
      }
    ],
    [
      {
        "fremdsprachen": [
          {
            "Fremdsprache 1": "English"
          },
          {
            "Fremdsprache 2": "Russisch"
          }
        ]
      },
      {
        "vorname": "Sergej"
      },
      {
        "nachname": "Fährlich"
      },
      {
        "adresse": "Musterstraße 1, Boring"
      }
    ]
  ]
}
 
X

Xyz1

Gast
Und das sortieren geht dann so...

Javascript:
var st = '{"Personenliste":[[{"fremdsprachen":[{"Fremdsprache 2":"Spanisch"},{"Fremdsprache 1":"English"}]},{"vorname":"Roman"},{"nachname":"Tisch"},{"adresse":"Sackgasse 1, Musterhausen"}],[{"fremdsprachen":[{"Fremdsprache 1":"English"},{"Fremdsprache 2":"Russisch"}]},{"vorname":"Sergej"},{"nachname":"Fährlich"},{"adresse":"Musterstraße 1, Boring"}]]}';
var obj = JSON.parse(st);

function sort1(objOrArr) {
  if (Array.isArray(objOrArr)) {
    objOrArr.sort(function (a, b) {
      if (Array.isArray(a) || Array.isArray(b)) {
        return 0;
      }
      var x = Object.keys(a); var y = Object.keys(b);
      return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    });
    for (var i = 0; i < objOrArr.length; i++) {
      sort1(objOrArr[i]);
    }
  } else if (typeof objOrArr === 'object') {
    for (var prop in objOrArr) {
      sort1(objOrArr[prop]);
    }
  }
}

sort1(obj);
st = JSON.stringify(obj, null, 2);

alert(st);


Dabei muss aber noch gewählt werden ob Personen der Personenliste (Array) auch sortiert werden sollen und falls ja wonach... Zurzeit bleibt die Reihenfolge der Personen der Personenliste intakt
 

Trèfle

Mitglied
Und das sortieren geht dann so...

Javascript:
var st = '{"Personenliste":[[{"fremdsprachen":[{"Fremdsprache 2":"Spanisch"},{"Fremdsprache 1":"English"}]},{"vorname":"Roman"},{"nachname":"Tisch"},{"adresse":"Sackgasse 1, Musterhausen"}],[{"fremdsprachen":[{"Fremdsprache 1":"English"},{"Fremdsprache 2":"Russisch"}]},{"vorname":"Sergej"},{"nachname":"Fährlich"},{"adresse":"Musterstraße 1, Boring"}]]}';
var obj = JSON.parse(st);

function sort1(objOrArr) {
  if (Array.isArray(objOrArr)) {
    objOrArr.sort(function (a, b) {
      if (Array.isArray(a) || Array.isArray(b)) {
        return 0;
      }
      var x = Object.keys(a); var y = Object.keys(b);
      return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    });
    for (var i = 0; i < objOrArr.length; i++) {
      sort1(objOrArr[i]);
    }
  } else if (typeof objOrArr === 'object') {
    for (var prop in objOrArr) {
      sort1(objOrArr[prop]);
    }
  }
}

sort1(obj);
st = JSON.stringify(obj, null, 2);

alert(st);


Dabei muss aber noch gewählt werden ob Personen der Personenliste (Array) auch sortiert werden sollen und falls ja wonach... Zurzeit bleibt die Reihenfolge der Personen der Personenliste intakt

Danke für den Hinweis. Ich arbeite gerade in Java (nicht JavaScrupt), funktioniert das dort absolut analog?
 
X

Xyz1

Gast
Ach so - Du erstellt das JSON in Java... na dann kannst Du ja beim Erstellen die Reihenfolge festlegen und musst nicht sortieren...

Sortieren geht in Java auch, aber es ist absolut un-analog...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Probleme bei der Formatierung beim Einfügen und löschen über DOM XML & JSON 7
A StAX formatierung oder auch newline! XML & JSON 2
B Json Objekt sinnvoll plätten? XML & JSON 1
W com.android.volley.ParseError: org.json.JSONException: End of input at character 0 of XML & JSON 6
L JSON auslesen und Labels in GUI verwenden XML & JSON 13
mananana Frage zu JSON XML & JSON 3
wofus JSON filtern nach bestimmten Wert XML & JSON 7
N JSON export String Unicode? XML & JSON 6
L Json reader XML & JSON 15
megusta JSON umschreiben (converter)? XML & JSON 4
P verschachteltes json verändern XML & JSON 3
Avalon JSON flatten und wieder in DTO konvertieren XML & JSON 21
M Objekt zu jsonArray in .json datei hinzufügen ? XML & JSON 3
Z json inkl. Array/Verschachtelung erstellen XML & JSON 2
J Object in JSON Datei einlesen und als neues Object erzeugen (in ein Object Array) XML & JSON 29
M json page 2 auslesen XML & JSON 1
K JSON mit GSON nutzen XML & JSON 4
S Java REST Client + Json XML & JSON 8
W Search Value in Json XML & JSON 6
K JSON-Bibliothek XML & JSON 5
M Großes Json Objekt benutzen XML & JSON 5
M Json auslesen XML & JSON 7
M Xml oder Json? XML & JSON 15
J JSON zu Java mit der GSON Google API XML & JSON 0
G Jackson JSON: Dynamische Serialisierung XML & JSON 6
W Json von URL Lesen (mit Gson Library) XML & JSON 3
W Json von URL Lesen XML & JSON 2
L Jackson JSON: Probleme beim einlesen XML & JSON 1
J JSon-Converter gesucht XML & JSON 2
Q Konvertierung von json zum Java Objekt nach vorgegebenem Schema XML & JSON 3
J JSon <-> XML zwecks Validierung XML & JSON 4
M [JSON] Wie Splitten? XML & JSON 14
G Mit JSON Java und C# verbinden XML & JSON 4
E JAXB und java.nio.file.Path XML & JSON 4
L login - Java IOException jaas.config File or Directory not present XML & JSON 1
G Probleme mit Jsoup in .jar File XML & JSON 11
K JAR-File mit XML-Datei XML & JSON 1
JBoby Yaml File lesen und in Objekte umwandel (SnakeYAML / YamlBeans) XML & JSON 0
O XML Zugriff auf Entity File XML & JSON 0
B xsd-Datei ins jar file XML & JSON 5
S XLSX-File NoSuchMethodError XML & JSON 7
M SEPA XML file XML & JSON 11
S Xml File für den Aufbau einer anderen Xml Datei XML & JSON 6
S XML file lässt sich in Eclipse nicht erstellen XML & JSON 2
M <root> node in bestehendes XML-File XML & JSON 8
jstei001 .xsd File wärend der Laufzeit einlesen und XMl rausschreiben XML & JSON 5
L Datenstruktur in XML-File schreiben XML & JSON 2
Q XML-File als Objekt in Java XML & JSON 6
G DXF-File schreiben XML & JSON 17
GUI-Programmer java.io.File aus .jar beziehen XML & JSON 6
B XML file erstellen und in lesbarer form speichern XML & JSON 2
M XML File generieren XML & JSON 3
S Aus XML-File eine Baumstruktur erzeugen XML & JSON 5
N XML File aus Internet korrekt mit absätzen formatiert abspeichern XML & JSON 10
J xmlParser/-Writer: DTD in seperates File auslagern XML & JSON 4
C Xml file gegen eine DTD validieren XML & JSON 3
G Problem beim schreiben von XML in eine File XML & JSON 2
S Premature end of file XML & JSON 7
T File öffnen XML & JSON 6
B XML file für schtasks XML & JSON 5
G Simples XML File einlesen mit JDom. Prefix not bound ? XML & JSON 2
G Xml File schematisch auslesen XML & JSON 2
J File objekt in xml speichern? XML & JSON 12
G XMLEncoder: discarding statement LinkedList.add(File) XML & JSON 16
X XML File auslesen/parsen u. in ne Hashmap speichern XML & JSON 2
M Unhierarchisches XML-File mit DOM-Parser auswerten XML & JSON 5
M XML File während Applet-Start auslesen? XML & JSON 10
X Einzelne Tags rausnehmen aus einem großen XML-file XML & JSON 4
E XOM setzen von XML-Schema declaration beim erzeugen XML-File XML & JSON 2
M XSL-File für Transformation verwenden XML & JSON 3
M XML-File verabeiten XML & JSON 19
A XML-File auslesen, alles leer? XML & JSON 2
S Geändertes XML-File wieder abspeichern. XML & JSON 10
D XML-file mit Eclipse erstellen + Namespaces XML & JSON 2
A html-File nach txt-File konvertieren XML & JSON 15
K XML to file geht nicht :( XML & JSON 4
A Internetinhalte auslesen und in einem XML-File speichern XML & JSON 4
T select-statement aus mysql in ein xml-file umwandeln XML & JSON 3
J XML File updaten XML & JSON 2
A XML-file an der Konsole ausgeben XML & JSON 4
D In ein XML File meinStyleSheet.css eintragen? XML & JSON 9
J Client für WebService programmieren (aus WSDL-File) XML & JSON 15
R wie kann ich ein xml file in einen string einlesen? XML & JSON 2
M *.group() in File auslesen XML & JSON 4
A XML-File ausgeben XML & JSON 2
W aus XML-File gelesenes als Methodenaufruf verwenden XML & JSON 5
T Elemente aus XML-File löschen (JDom) XML & JSON 9
T [JDOM] XML File, neue Daten hinzufügen XML & JSON 5
D Aus Java XML-File an PHP-Skript senden: Encodingproblem? XML & JSON 3
T Prob: Auslesen XML File mit JDOM XML & JSON 2
B DOM oder HTML File drucken "wie ein Browser es zeigen w XML & JSON 3

Ähnliche Java Themen

Neue Themen


Oben