java - Jackson配置自己的json

标签 java json jackson

我开始使用 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/

相关文章:

java - 使用小数组的选择排序算法

ios - UITableView 滚动滞后

database - 在数据库和 Json 中保存新行

java - Spring Boot 与 @JsonIgnore

java - 如何快速制作Java代码原型(prototype)?

java - 使用 java 在 google Analytics api 中指标返回始终为 null

javascript - 嵌套对象,防止 "cannot get value of ' undefined'"

java - Jackson 序列化器默认包装列表?

java - jersey 2.6 jackson 2.3 和 map 中的复杂键

java - 在 Android/Java 中使用 ViewHolder 的通用类