GSON из JSON с числовыми именами классов

У меня есть строка JSON, поступающая с сервера, и я не могу ее контролировать.
Я сгенерировал классы Java с помощью программного использования библиотеки jsonschema2pojo.
Я использую GSON для десериализации JSON в мои объекты Java.

Вот пример JSON.

"description_by_id": {
    "50": {
        "field1": "value1",
        "field2": "value2",
        "field3": "value3"
    }
}

Этот подкласс "50" - это всего лишь 1 из 18 классов, которые названы одинаково как число.
Когда jsonschema2pojo генерирует класс Java, он, понятно, добавляет подчеркивание для создания имени класса (так, _50).

jsonschema2pojo генерирует класс DescriptionById с этим членом:

@JsonProperty("50") private com.me.models._50 _50;

И геттер выглядит так (сеттер похож):

@JsonProperty("50") public com.me.models._50 get50() { return _50; }

Я использую GSON так:

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

Но после завершения GSON объект _50 и другие 17, подобные ему, становятся нулевыми, и я проверил, что соответствующие места в JSON действительно заполнены действительными значениями.

Есть ли что-то в этой цепочке, что я могу сделать, чтобы она работала правильно, без необходимости вручную взломать проблему?

1 ответ

Этот "50" подкласс на самом деле просто 1 из 18 классов, которые так же названы как число

И что происходит, когда вы получаете один дополнительный идентификатор, для которого у вас нет класса Java? Гсон не будет знать, что с этим делать...

Не делать уроки. Используйте карту.

Сделайте этот "внутренний" POJO

public class Inner {

    private String field1;
    private String field2;
    private String field3;

}

И внешний POJO

public class Outer {
    private TreeMap<String, Inner> description_by_id;
}

И вы бы тогда someOuter.getDescriptionById("50").getField1()

(Добавьте обратно в атрибуты Gson при необходимости)

Другие вопросы по тегам