2013-08-28 8 views
0

Я начинаю играть с Джексоном, но я застрял в какой-то момент. Я получаю, что Json вернулся:Jackson configure own 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 с Jackson был исключен массив учеников?

EDIT JAVA CODE

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); 

Я не уверен, что это правильный путь, и я бы ожидать, что есть более простой способ

UPDATE Я исправил его с помощью 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

Вы можете использовать атрибуты Джексона установить @JsonIgnore для списка вы не хотите, чтобы показать в своем классе POJO.

Редактировать:/ Если это строго для вас, вы также можете написать JsonFilter для Object Mapper. В вашем случае SimpleBeanPropertyFilter должен работать нормально, как на заводе.

+0

Спасибо за отзыв, но я хочу вернуть свойства в другой json, поэтому аннотация @JsonIgnore не подходит. – user2248905

+0

@ user2248905 см. Обновленный ответ – schlingel

+0

Спасибо, что было именно то, что мне нужно :) это просто отлично работает – user2248905