我开始使用 Jackson json,但在某个时候我卡住了。我得到 Json 返回:
[
{
"id": "1",
"groups": [
{
"id": "1",
"name": "Group99",
"students": [
{
"studentId": "1"
},
{
"studentId": "2"
},
{
"studentId": "3"
}
],
"schoolId": 10
},
{
"id": "2",
"name": "Group100",
"students": [
{
"studentId": "1"
},
{
"studentId": "2"
},
{
"studentId": "3"
}
],
"schoolId": 10
}
]
}
]
我想获取一个不包含学生数组的 JSON。就像这样
[
{
"id": "1",
"groups": [
{
"id": "1",
"name": "Group99",
"schoolId": 10
},
{
"id": "2",
"name": "Group100",
"schoolId": 10
}
]
}
]
现在我从数据库中获取了一个列表,并创建了一个仅返回 ObjectMapper.writeValueAsString(list) 的 ObjectMapper。如何修改列表,以便将学生数组排除在 Jackson 的 JSON 中?
编辑JAVA代码
我现在拥有的Java代码是
List<Assessment> assessments = (List<Assessment>) assessmentRepository.findGroupsByUsernameAndAssessmentId(username, assessmentId);
//2. Convert JSON to Java object
ObjectMapper mapper = new ObjectMapper();
// create the new JSON
List<String> groups = new ArrayList<>();
for(int i = 0; i <= assessments.size() - 1; i++){
for(int k = 0; k < assessments.get(i).getGroups().length; k++){
// create the String with only the wanted information
}
}
return mapper.writeValueAsString(groups);
我不确定这是否是正确的方法,我希望有一种更简单的方法
更新 我使用 HashMap 修复了它。 Java代码如下。如果这是一个好方法或者是否有更好的方法,请告诉我
Assessment assessment = (Assessment) assessmentRepository.findGroupsByUsernameAndAssessmentId(username, assessmentId);
// 2. Convert JSON to Java object
ObjectMapper mapper = new ObjectMapper();
// create the new JSON
ArrayList<Object> jsonWithoutTeacherAndStudents = new ArrayList<Object>();
HashMap<String, String> jsonKeyAndValueMap = new HashMap<>();
GroupSummary[] summary = assessment.getGroups();
for (int i = 0; i < assessment.getGroups().length; i++) {
jsonKeyAndValueMap.put("id", summary[i].getId());
jsonKeyAndValueMap.put("name", summary[i].getName());
jsonKeyAndValueMap.put("schoolId", Integer.toString(summary[i].getSchoolId()));
jsonWithoutTeacherAndStudents.add(mapper.writeValueAsString(jsonKeyAndValueMap));
}
return jsonWithoutTeacherAndStudents.toString();
最佳答案
您可以使用 Jackson 属性为您不想在 POJO 类中显示的列表设置 @JsonIgnore。
编辑:/ 如果这对您来说太严格,您也可以写 JsonFilter对于对象映射器。在你的情况下 SimpleBeanPropertyFilter应该像工厂一样工作得很好。
关于java - Jackson配置自己的json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18490458/