pojo разобрать gson с неверными именами java - PullRequest
14 голосов
/ 10 января 2011

Я работаю с YouTube JSON из Google-API-клиента:

{
    "apiVersion": "2.0",
    "data": {
        "updated": "2011-01-05T13:48:33.146Z",
        "totalItems": 4,
        "startIndex": 1,
        "itemsPerPage": 1,
        "items": [
            {
                "id": "YfUzMkAlOBI",
                "uploaded": "2010-12-29T16:50:47.000Z",
                "updated": "2010-12-29T16:50:47.000Z",
                "uploader": "devandroidcs",
                "category": "Entertainment",
                "title": "Teste 2",
                "description": "Description do teste2",
                "tags": [
                    "mobile"
                ],
                "thumbnail": {
                    "sqDefault": "http://i.ytimg.com/vi/YfUzMkAlOBI/default.jpg",
                    "hqDefault": "http://i.ytimg.com/vi/YfUzMkAlOBI/hqdefault.jpg"
                },
                "player": {
                    "default": "http://www.youtube.com/watch?v\u003dYfUzMkAlOBI&feature\u003dyoutube_gdata_player",
                    "mobile": "http://m.youtube.com/details?v\u003dYfUzMkAlOBI"
                }
.
.
.
}

на этом этапе я должен создать имя поля по умолчанию в моем классе parse java Уже сделали этот анализ работы с другими полями, проблема в том, что по умолчанию личное имя Java, поэтому я не могу вызвать переменную по умолчанию.

как мне это сделать?

Ответы [ 3 ]

24 голосов
/ 10 января 2011

Полагаю, ваш ответ лежит в поддержке именования полей JSON :

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

См., Например, следующий пример:

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

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

@SerializedName("default")
private final String someOtherNameThanDefault;
2 голосов
/ 09 сентября 2015

Просто скажите, исходя из моего личного опыта, @Key может не работать с сериализацией / десериализацией при выборе неправильного парсера Json.

(1) Когда вы используете парсер Gson, как показано ниже:

GsonBuilder gsb = new GsonBuilder();
Gson gson = gsb.create();
OneDriveItem oneDriveItem = gson.fromJson(jasonData1, OneDriveItem.class);

@ Ключ не работает, вы должны использовать @SerializedName для аннотирования имени поля.

(2) Когда вы используете JsonFactory из пакета com.google.api.client.json, как показано ниже:

 JacksonFactory jsonFactory=new JacksonFactory();

@ Ключ должен работать.

1 голос
/ 10 января 2011

Если вы используете аннотацию @Key для сопоставленных полей, вам просто нужно использовать пользовательское значение, которое можно передать этой аннотации.Поэтому выберите допустимое имя для своего поля и отобразите его как @Key («по умолчанию»):

@Key("default")
private String defaultUrl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...