我正在尝试以下列格式显示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);
}
}
输出:
预期产出:
答案 0 :(得分:1)
我认为它与JSONObject
实际上使用Map进行表示这一事实有关,并且不能保证Map中值的顺序保留。
答案 1 :(得分: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();
}
答案 2 :(得分:0)
Pacane是对的。如果您使用例如LinkedHashMap
,它将起作用。
例如,这可行......
private class OwnJsonObj extends JSONObject {
OwnJsonObj() {
super(new LinkedHashMap());
}
}
您可以使用此嵌套类而不是JSONObject
,它会保留顺序。
如果你在其他地方使用这个物体,我不推荐它,它会弄得一团糟。
答案 3 :(得分:0)
Pacane是对的,地图不会按照添加的顺序存储对象,而JSON对象在java中存储为地图。我可以建议使用数组而不是地图:put method in the json object adds value to the first of the jsonobject;