Gson: нужно сериализовать целые нули, но исключить другие нули - PullRequest
0 голосов
/ 09 июня 2018

Какой самый простой способ получить следующее? Я хочу сериализовать целочисленные значения независимо от нуля или отличного от нуля, но я также хочу исключить другие (не int) нули.Если я использую этот подход

Gson gson = new GsonBuilder().serializeNulls().create();

, то я сериализую как целые нули, так и другие нули (не то, что мне нужно).


Возможно, мне нужно уточнить вопрос.Например, если у меня есть класс

class SomeClass {
    private int shift;
    private SomeClass2 additionalData; 
}

Итак, я хочу сериализовать этот объект класса, чтобы поля int всегда отображались, даже если он равен нулю, но дополнительные данные должны отображаться, только если он не равен нулю.

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Надеюсь, я решил проблему: цель состояла в том, чтобы явно установить для поля int значение 0, в противном случае (не инициализированное) оно обрабатывалось как нулевое: либо пропускалось (если serializeNulls () не используется), либо кодировалось как "нулевое""

0 голосов
/ 09 июня 2018

В Gson по умолчанию включена поддержка пустых объектов, и он пропустит пустые поля в вашем объекте.Но если передается ссылка null, то Gson будет сериализовать "null".См. Руководство пользователя Gson - Поддержка нулевых объектов .

Если вы сериализуете карту целых чисел, то записи, сопоставленные с нулем, пропускаются;но при сериализации списков или массивов null не пропускаются.

Вы можете пропустить нулевые значения, предварительно отфильтровав их из вашей коллекции;см. напримерниже

package stackOv;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class UseGson {
  public static void main(String[] args) {

    Integer array[] = new Integer[]{1,2,null,34};
    List<?> list = Arrays.asList(array);
    List<?> list2 = 
        list.stream()
        .filter(x->x!=null)
        .collect(Collectors.toList());

    Gson gson = new GsonBuilder().create() ;

    System.out.println( gson.toJson(list));
    System.out.println( gson.toJson(list2));
  }
}

(из руководства)

json = gson.toJson(null);
System.out.println(json);
======== OUTPUT ========
null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...