Java Json格式错误显示
我试图以以下格式显示JSon文件。但当我运行程序时,它会在底部显示顶部。为什么会这样?我这样做对吗?请在下面的代码中找到输出和预期输出的图片 代码: 输出: 预期产出:Java Json格式错误显示,java,json,formatting,Java,Json,Formatting,我试图以以下格式显示JSon文件。但当我运行程序时,它会在底部显示顶部。为什么会这样?我这样做对吗?请在下面的代码中找到输出和预期输出的图片 代码: 输出: 预期产出: 我认为这与以下事实有关:JSONObject实际上使用了一个映射来表示它,并且映射中的值顺序不能保证被保留。作为一种解决方法,您可以向学生类添加一个方法,以JSON格式打印或返回它的属性 大概是这样的: public class Student { private String name; private String
我认为这与以下事实有关:
JSONObject
实际上使用了一个映射来表示它,并且映射中的值顺序不能保证被保留。作为一种解决方法,您可以向学生
类添加一个方法,以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();
}
帕坎是对的。例如,如果您使用
LinkedHashMap
,它将起作用
例如,这将起作用
private class OwnJsonObj extends JSONObject {
OwnJsonObj() {
super(new LinkedHashMap());
}
}
您可以使用这个嵌套类而不是JSONObject
,它保留了顺序。
如果您在其他地方使用此对象,我不建议这样做,这会造成混乱。Pacane是对的,映射存储对象的顺序与添加对象的顺序不同,JSON对象在java中存储为映射。我可以建议使用数组而不是地图,如下所示:谢谢!我会试试看
private class OwnJsonObj extends JSONObject {
OwnJsonObj() {
super(new LinkedHashMap());
}
}