2017-02-08 4 views
2

Ich versuche, eine JSon-Datei im folgenden Format anzuzeigen. Aber wenn ich mein Programm starte, wird der obere Teil unten angezeigt. Warum ist das? mache ich das richtig? Hier finden Sie ein Bild der Ausgabe und der erwarteten Ausgabe unter dem Code.Json-Format falsch angezeigt

Code:

public class Student { 

    public static void main(String[] args) { 

     int a = -7; 
     int b = 7; 
     int k = 103; 
     int order = 109; 
     int px = 60; 
     int py = 76; 
     int qx = 101; 
     int qy = 42; 
     int n = 3; 
     int rx = 2; 
     int ry = 102; 
     int sx = 64; 
     int sy = 17; 

     JSONObject obj = new JSONObject(); 
     obj.put("name", "JEAN-LUC PALMYRE"); 
     obj.put("srn", "120299364"); 


     JSONObject objEcc = new JSONObject(); 
     objEcc.put("a",a); 
     objEcc.put("b",b); 
     objEcc.put("k",k); 
     objEcc.put("order",order); 

     obj.put("ecc", objEcc); 

     JSONObject objModk_add = new JSONObject(); 
     objModk_add.put("x", px); 
     objModk_add.put("y", py); 

     obj.put("p", objModk_add); 

     objModk_add.put("x", qx); 
     objModk_add.put("y", qy); 

     obj.put("q", objModk_add); 

     objModk_add.put("x", rx); 
     objModk_add.put("y", ry); 

     obj.put("r", objModk_add); 

     JSONObject objModk_mul = new JSONObject(); 
     objModk_mul.put("x", px); 
     objModk_mul.put("y", py); 

     obj.put("p", objModk_mul); 


     try (FileWriter file = new FileWriter("Jean-LucPalmyre_120299364_CO3326_cw1.json")) 
     { 

      file.write(obj.toJSONString()); 
      file.flush(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     System.out.print(obj); 

    } 
} 

Ausgang:

Output

Erwartete Ausgabe:

Expected output

Antwort

1

Ich glaube, es hat etwas mit der Tatsache zu tun hat, dass ein JSONObject ist tatsächlich Verwenden Sie eine Map für ihre Darstellung, und die Reihenfolge der Werte in einer Map wird nicht garantiert.

0

Als Workaround können Sie eine Methode zu Ihrer Student Klasse hinzufügen, die ihre Eigenschaften im JSON-Format druckt oder zurückgibt.

Etwas wie folgt aus:

public class Student { 

private String name; 
private String srn; 
private Ecc ecc; 
... 

public Student(String name, String srn, Ecc ecc ...) { 
    this.name = name; 
    this.srn = srn; 
    this.ecc = ecc; 
    .... 
} 

@Override 
public String toString() { 
    JSONObject jsonName = new JSONObject(); 
    obj.put("name", name); 
    JSONObject jsonSrn = new JSONObject(); 
    obj.put("srn", srn); 
    ... 

    "{" + 
    jsonName.toJSONString() + 
    "," + 
    jsonSrn.toJSONString() + 
    ... // do the sane with the rest of the properties 
    + 
    "}"  
} 
} 

Dann können Sie einfach so drucken.

try (FileWriter file = new FileWriter("JeanLucPalmyre_120299364_CO3326_cw1.json")) 
    { 
     file.write(new Student("MARK", "000001", new Ecc()...)); 
     file.flush(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

Vielen Dank! Werde es ausprobieren –

0

Pacane hat Recht. Wenn Sie zum Beispiel LinkedHashMap verwenden, würde es funktionieren.

Zum Beispiel das funktionieren würde ...

private class OwnJsonObj extends JSONObject { 
     OwnJsonObj() { 
      super(new LinkedHashMap()); 
     } 
    } 

können Sie diese verschachtelte Klasse anstelle von JSONObject, es bewahrt Ordnung. Ich empfehle es nicht, wenn Sie dieses Objekt woanders verwenden, würde es ein Durcheinander machen.

Verwandte Themen