Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Json格式错误显示_Java_Json_Formatting - Fatal编程技术网

Java Json格式错误显示

Java Json格式错误显示,java,json,formatting,Java,Json,Formatting,我试图以以下格式显示JSon文件。但当我运行程序时,它会在底部显示顶部。为什么会这样?我这样做对吗?请在下面的代码中找到输出和预期输出的图片 代码: 输出: 预期产出: 我认为这与以下事实有关:JSONObject实际上使用了一个映射来表示它,并且映射中的值顺序不能保证被保留。作为一种解决方法,您可以向学生类添加一个方法,以JSON格式打印或返回它的属性 大概是这样的: public class Student { private String name; private String

我试图以以下格式显示JSon文件。但当我运行程序时,它会在底部显示顶部。为什么会这样?我这样做对吗?请在下面的代码中找到输出和预期输出的图片

代码:

输出:

预期产出:


我认为这与以下事实有关:
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());
        }
    }