0

私は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 を作成しました。ジャクソンで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();
4

1 に答える 1

2

Jackson 属性を使用して、POJO クラスに表示したくないリストに @JsonIgnore を設定できます。

編集:/それがあなたにとって厳密である場合は、オブジェクトマッパーのJsonFilterを作成することもできます。あなたの場合、SimpleBeanPropertyFilterはファクトリとして問題なく動作するはずです。

于 2013-08-28T14:20:05.927 に答える