gpt4 book ai didi

java - 保留 null 值 – Java POJO 到 org.JSONObject

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:05 25 4
gpt4 key购买 nike

我正在使用 Spring Boot 在 Java 中创建 RESTful API 服务。我有一个类,我试图从中创建一个 JSON 对象。一切都运行良好 - 除了类实例中的 json 对象省略了 null 值。我想保留键并将值设置为 null,而不是从输出中完全剥离它们。

输出如下(为简洁起见缩短)

    "questions": [
{
"question": "question1",
"svg": "svg1",
"questionNum": 1
},
{
"question": "question2"
"svg": "q2",
"questionNum": 2
}
],

首选输出

    "questions": [
{
"question": "question1",
"svg": "svg1",
"questionNum": 1,
"shuffledNum": null,
"answer": null

},
{
"question": "question2"
"svg": "q2",
"questionNum": 2,
"shuffledNum": null,
"answer": null
}
],

这是 JsonQuestionObject:

public class JsonQuestionObject {

private Integer questionNum;
private String svg;
private Integer shuffledNum = null;
private String question;
private Integer answer = null;

//Getters & Setters
}

这是 JSON Creator 方法(它采用 JsonQuestionObjects 数组)

public JSONObject createQuestionsJson(ArrayList<JsonQuestionObject> questions) {
JSONObject output = new JSONObject();
JSONArray content = new JSONArray();
JSONObject subContent = new JSONObject();
JSONArray qarray = new JSONArray();


for (int i = 0; i < questions.size(); i++) {
JsonQuestionObject q = questions.get(i);
Integer qnum = q.getQuestionNum();
JSONObject qitem = new JSONObject(q);

if (qnum < 5) {
qarray.put(qitem);
} else if (qnum > 4 && qnum < 7) {
qarray.put(qitem);
} else if (qnum > 6 && qnum < 9 ) {
qarray.put(qitem);
} else if (qnum > 8 &&) {
qarray.put(qitem);
}
}
subContent.put("questions", qarray);
content.put(subContent);
output.put("output", content);

return output;
}

除了使用每个属性和设置的 setter 和 getter 手动创建 JSONObject 之外,还有其他方法可以保留这些 null 值 JSONObject.put("answer", JSONObject.NULL)

非常感谢您的帮助。

最佳答案

当您使用构造函数 public JSONObject(Object bean) 创建新的 JSONObject 时,内部实现会跳过所有 null 值。要保留 null-s,您必须自己创建并填充新的 JSONObject

从另一方面来看,您不需要使用org.json.*库。您可以使用MapList构建类似的结构。参见下面的结构:

JsonQuestionObject[] questionArray = {new JsonQuestionObject()};
HashMap<String, Object> questions = new HashMap<>();
questions.put("questions", questionArray);

List<Object> questionsList = new ArrayList<>();
questionsList.add(questions);

Map<String, Object> result = Collections.singletonMap("output", questionsList);

您可以在方法中返回Map,它将自动序列化为JSON。您可以使用 Spring Boot 属性启用 null 或添加 JsonInclude 注释:

@JsonInclude(JsonInclude.Include.ALWAYS)
public class JsonQuestionObject

关于java - 保留 null 值 – Java POJO 到 org.JSONObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54891247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com