2016-07-13 4 views
1

Я работаю над приложением, которое общается с сервером и отправляет данные на веб-сайт, соответственно, получает данные с этого веб-сайта. Данные составят около 5 расписаний, которые являются необязательными.Преобразование объекта в JSON String с Jackson

См., Например, если установлено 3 расписания, и я хочу отменить выбор одного из них, он должен отправить на веб-сайт только 2 расписания. Вот проблема.

Я анализирую свой код, и я пришел к выводу, что проблема заключается в методе преобразования объекта в JSON String.

Вот код:

public class PriorityResponse { 

    @JsonProperty("priority1") 
    public Priority priorityOne; 
    @JsonProperty("priority2") 
    public Priority priorityTwo; 
    @JsonProperty("priority3") 
    public Priority priorityThree; 
    @JsonProperty("priority4") 
    public Priority priorityFour; 
    @JsonProperty("priority5") 
    public Priority priorityFive; 

    public Priority getPriorityOne() { 
     return priorityOne; 
    } 

    public Priority getPriorityTwo() { 
     return priorityTwo; 
    } 

    public Priority getPriorityThree() { 
     return priorityThree; 
    } 

    public Priority getPriorityFour() { 
     return priorityFour; 
    } 

    public Priority getPriorityFive() { 
     return priorityFive; 
    } 
    public String toJsonObject(){ 

     String jsonInString = ""; 
     ObjectMapper mapper = new ObjectMapper(); 
     //Object to JSON in String 
     try { 
      jsonInString = mapper.writeValueAsString(this); 
     } catch (JsonProcessingException e) { 
      e.printStackTrace(); 
     } 

     return jsonInString; 
    } 
} 

На этой линии

jsonInString = mapper.writeValueAsString(this); 

строка равна нулю, но при возвращении jsonInString, посылает 3 расписание, а не 2. Если я внести другие изменения , он отправляет правильные данные, проблема заключается только в том, что я хочу отменить выбор одного или нескольких расписаний.

Результат должен быть, как это, когда я отменить приоритет4:

{"priority5":{"number":null,"timeOut":null,"timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":true,"sun":true,"thu":true,"tue":true,"wed":true}},"priority4":{"number":null,"timeOut":null,"timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":true,"sun":true,"thu":true,"tue":true,"wed":true}},"priority1":{"number":"1234561231","timeOut":"9","timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":false,"sun":false,"thu":true,"tue":true,"wed":true}},"priority3":{"number":"21515211545","timeOut":"","timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":true,"op":false},"fri":false,"mon":true,"sat":false,"sun":false,"thu":true,"tue":true,"wed":false}},"priority2":{"number":"789123156421","timeOut":"","timeTable":{"time":{"fh":"04","fm":"02","th":"13","tm":"07","cl":false,"op":false},"fri":true,"mon":true,"sat":true,"sun":true,"thu":true,"tue":true,"wed":true}}} 

, но, кажется, что строка JSON не обновляется, когда я отменить один приоритет, поскольку отправляется в тот же приоритет, что я получаю начальный , Вот что отправляется:

{"priority5":{"number":null,"timeOut":null,"timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":true,"sun":true,"thu":true,"tue":true,"wed":true}},"priority4":{"number":"12233456545","timeOut":"6","timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":false,"sun":false,"thu":true,"tue":true,"wed":true}},"priority1":{"number":"1234561231","timeOut":"9","timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":false,"op":true},"fri":true,"mon":true,"sat":false,"sun":false,"thu":true,"tue":true,"wed":true}},"priority3":{"number":"21515211545","timeOut":"5","timeTable":{"time":{"fh":null,"fm":null,"th":null,"tm":null,"cl":true,"op":false},"fri":false,"mon":true,"sat":false,"sun":false,"thu":true,"tue":true,"wed":false}},"priority2":{"number":"789123156421","timeOut":"5","timeTable":{"time":{"fh":"04","fm":"02","th":"13","tm":"07","cl":false,"op":false},"fri":true,"mon":true,"sat":true,"sun":true,"thu":true,"tue":true,"wed":true}}} 

ответ

1

пытаются использовать com.google.gson.Gson Если какой-либо атрибут является пустым парсер

String jsonInString = new Gson().toJson(yourObject); 

результаты:

{ 
"priorityOne":{}, 
"priorityTwo":{}, 
    ... 
} 
+4

Похоже, что этот вопрос пытается использовать Джексон. Пожалуйста, уважайте это намерение. –

0

ли установка сериализацияВключение в NON_NULL дает вам то, что вы хотите?

public String toJsonObject() throws IOException{ 

    String jsonInString = ""; 
    ObjectMapper mapper = new ObjectMapper(); 
    //Object to JSON in String 
    try { 
     // Will only include non null objects 
     mapper.setSerializationInclusion(Inclusion.NON_NULL); 
     jsonInString = mapper.writeValueAsString(this); 
    } catch (JsonProcessingException e) { 
     e.printStackTrace(); 
    } 

    return jsonInString; 
} 
+0

К сожалению, я получаю тот же результат. Проблема сохраняется, даже если я использую Inclusion.NON_NULL. – ruru

+0

Привет:
Можете ли вы точно указать, что вы хотите видеть в своем выпуске? И какое состояние каждого из 5 экземпляров «Приоритет» в вашем объекте «PriorityResponse». –

+0

Я редактирую свой вопрос с выходом. – ruru

Смежные вопросы