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

2022-09-01 19:06:02

我正在使用 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());

它显示如下输出:

 {"id":"12345", "status" : {}}

它显示为空白并添加卷曲基数。这是什么意思?有人经历过这个问题吗?


答案 1

首先,我强烈建议不要使用这个库(org.json),这是非常古老且不受支持(如我所知)库。我建议杰克逊格森

但是,如果您确实需要 JSONObject,则可以将 getter 添加到枚举中:

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

    public String getStatus() {
        return this.name();
    }
}

序列化的结果:

{"id":"12345","status":{"status":"INPROGRESS"}}

据我所知,JSONObject不支持对内部没有任何额外数据的枚举进行正确的序列化。


答案 2
ObjectMapper mapper= new ObjectMapper();

new JSONObject(mapper.writeValueAsString(job));

会做这个把戏。现在,类型看起来很正常,并且在json对象中正确转换。EnumsDateTime

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