Подтвердить что ты не робот

Сериализация объектов в JSON (с использованием Gson). Как установить имена полей в UpperCamelCase?

Мне нужно сериализовать список простых объектов Java в JSON, используя библиотеку Google Gson.

Объект:

public class SimpleNode {
    private String imageIndex;
    private String text;

    public String getImageIndex() {
        return imageIndex;
    }

    public void setImageIndex(String imageIndex) {
        this.imageIndex = imageIndex;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
       this.text = text;
    }
}

Я написал следующий код для сериализации:

 List<SimpleNode> testNodes = repository.getElements(0);
 Gson gson = new Gson();
 String jsonNodesAsString = gson.toJson(testNodes);

Это работает, но имя поля объектов JSON - lowerCamelCase. Вот так:

[
  {
    "imageIndex": "1",
    "text": "Text 1"
  },
  {
    "imageIndex": "2",
    "text": "Text 2"
  }
]

Как получить имя JSON с именем поля UpperCamelCase, например:

[
  {
    "imageIndex": "1",
    "text": "Text 1"
  },
  {
    "imageIndex": "2",
    "text": "Text 2"
  }
]

Я думаю, что я могу переименовать переменные-члены в UpperCamelCase, но может быть, есть другой способ?

4b9b3361

Ответ 1

Взято из документов:

Gson поддерживает некоторые предопределенные политики именования полей для преобразования стандартных имен полей Java (то есть имена с верблюжьим именем, начинающиеся с нижнего регистра --- sampleFieldNameInJava), к имени поля Json (например, sample_field_name_in_java или SampleFieldNameInJava). См. Класс FieldNamingPolicy для получения информации о предопределенных политиках именования.

Он также имеет основанную на аннотации стратегию, позволяющую клиентам определять пользовательские имена для каждого поля. Обратите внимание, что стратегия на основе аннотаций имеет проверку имени поля, которая приведет к возникновению исключений "Runtime", если в качестве значения аннотации указано недопустимое имя поля.

Ниже приведен пример использования функций политики именования Gson:

private class SomeObject {
  @SerializedName("custom_naming") 
  private final String someField;

  private final String someOtherField;

  public SomeObject(String a, String b) {
    this.someField = a;
    this.someOtherField = b;
  }
}

SomeObject someObject = new SomeObject("first", "second");
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
String jsonRepresentation = gson.toJson(someObject);
System.out.println(jsonRepresentation);

======== ВЫХОД ========

{"custom_naming":"first","SomeOtherField":"second"}

Однако, для чего вы хотите, вы можете просто использовать это:

Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();

Используя параметр UPPER_CAMEL_CASE, вы достигнете своей цели.