2013-08-28 29 views
0

我开始玩杰克逊json,但我坚持在某一点。我得到那个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刚刚返回ObjectMapper.writeValueAsString(列表)。我如何修改这个列表,以便杰克逊在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(); 
+0

注意:您确实应该包含Java类定义,而不仅仅是JSON - 数据绑定是从一个转换到另一个转换的艺术;所以只有JSON不足以回答大多数问题。 – StaxMan

回答

2

您可以使用杰克逊属性来设置你不想在你的POJO类来显示列表中@JsonIgnore。

编辑:/ 如果这对你是严格的,你也可以为Object Mapper编写JsonFilter。在你的情况下,SimpleBeanPropertyFilter应该工厂正常工作。

+0

感谢您的提示,但我想返回其他json中的属性,所以@JsonIgnore注释不是最合适的。 – user2248905

+0

@ user2248905查看更新的答案 – schlingel

+0

谢谢,这正是我所需要的:)它只是在完美工作 – user2248905