2017-02-08 23 views
2

JSonファイルを次の形式で表示しようとしています。しかし、私は私のプログラムを実行すると、下部に上部が表示されます。どうしてこれなの?私はこれを正しくしていますか?コードの下に出力と予想される出力の画像を見つけてください。Json形式が正しく表示されない

コード:

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); 

    } 
} 

出力:

Output

予想される出力:

Expected output

答えて

1

私はそれがJSONObjectであるという事実とは何かを持っていると信じて実際のマップの値の順序が保持されることは保証されていないことに注意してください。

0

回避策として、Studentクラスにメソッドを追加して、そのプロパティをJSON形式で表示または返すことができます。

このような何か:

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 
    + 
    "}"  
} 
} 

次に、あなただけのように印刷することができます。

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

ありがとうございました!試してみる –

0

Pacaneが正しい。たとえば、LinkedHashMapを使用すると動作します。あなたが代わりにJSONObjectのこの入れ子になったクラスを使用することができ、これはうまくいく例えば

...

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

、それは順序を保持します。 このオブジェクトを別の場所で使用すると、私はそれをお勧めしません。

関連する問題