我正在使用Spring Boot在Java中创建RESTful API服务。我有一个尝试从其创建JSON对象的类。一切工作都很好-除了类实例中的json对象忽略了空值。我想保留键并将其值设置为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
}
],
public class JsonQuestionObject {
private Integer questionNum;
private String svg;
private Integer shuffledNum = null;
private String question;
private Integer answer = null;
//Getters & Setters
}
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;
}
除了通过使用每个属性的设置器和获取器并设置JSONObject.put("answer", JSONObject.NULL)
手动创建JSONObject之外,还有其他方法可以保留这些空值吗?
非常感谢您的帮助。
答案 0 :(得分:0)
尝试将spring.jackson.default-property-inclusion=always
添加到您的application.properties
中。
另外,请查看spring.jackson
系列中的其他设置,以了解JSON序列化的其他设置。
答案 1 :(得分:0)
当您使用构造函数JSONObject
创建新的public JSONObject(Object bean)
时,内部实现会跳过所有null
的值。要保留null
-s,您必须自己创建并填充新的JSONObject
。
从另一面看,您不需要使用org.json.*
库。您可以使用Map
和List
来构造类似的结构。参见以下结构:
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