Java:将包含枚举的对象转换为Json对象

Ron*_*nie 16 java enums json

我使用org.json库将Object转换为Json格式.请检查以下代码段.

public enum JobStatus implements Serializable{
     INCOMPLETE,
     INPROGRESS,
     ABORTED,
     COMPLETED
}

public class Job implements Serializable {
    private string id;
    private JobStatus status;
    ...
}

...

// Create Job Object
Job job = new Job("12345", JobStatus.INPROGRESS);

// Convert and print in JSON format
System.out.println(new JSONObject(job).toString());
Run Code Online (Sandbox Code Playgroud)

它显示如下输出:

 {"id":"12345", "status" : {}}
Run Code Online (Sandbox Code Playgroud)

它显示空白并添加Curly基础.这是什么意思?有人经历过这个问题吗?

小智 17

首先,我强烈建议不要使用这个库(org.json),这是非常古老的,不支持(据我所知)库.我建议杰克逊或者Gson.

但是如果你真的需要JSONObject,你可以在getum中添加getter:

 public enum JobStatus implements Serializable{
    INCOMPLETE,
    INPROGRESS,
    ABORTED,
    COMPLETED;

    public String getStatus() {
        return this.name();
    }
}
Run Code Online (Sandbox Code Playgroud)

序列化的结果:

{"id":"12345","status":{"status":"INPROGRESS"}}
Run Code Online (Sandbox Code Playgroud)

据我所知,JSONObject不支持对内部没有任何附加数据的枚举的正确序列化.


小智 5

ObjectMapper mapper= new ObjectMapper();

new JSONObject(mapper.writeValueAsString(job));
Run Code Online (Sandbox Code Playgroud)

就可以了。现在EnumsDateTime类型看起来很正常,并且可以正确转换为 json 对象。

我作为一个寻求答案的人来到这个页面,我的研究帮助我回答了这个问题。