Разбор странно построенных Json / Gson - PullRequest
0 голосов
/ 27 июня 2011

Я буду кратким, у меня проблема с каким-то действительно плохо выложенным Json (из того, что я могу сказать в любом случае), я отстраняюсь от веб-сервиса, я новичок в java / android/ JSON, поэтому любая помощь будет принята с благодарностью, структура Json:

> {"cursor":
>         {"currentPageIndex":0,
>         "estimatedResultCount":32,
>                 "pages":{
>                          "label":1,
>                           "start":0},
>         "responseDetails":null,
>         "responseStatus":200}, "results":[
>         {"accuracy":24140,
>         "addressLines":
>                 {"Address1":"A house number",
>                 "Address2":"A Street",
>                 "Address3":"A city",
>                 "Address4":"A State",
>                 "Address5":"A Country",
>                 "Postcode":"123456"},
>         "city":"A City",
>         "country":"A Country",
>         "ddUrl":"http://link1.com",
>         "ddUrlFromHere":"http://link2.com",
>         "ddUrlToHere":"http://link3.com",
>         "lat":54.52909583,
>         "lng":-0.45554611,
>         "phoneNumbers":
>                 {"number":"123456789",
>                 "type":"work"},
>         "region":"China",
>         "staticMapUrl":"http://link4.com",
>         "streetAddress":"A house number, A Street, A city, A State,
> 123456",
>         "title":"Ali Baba Carpets",
>         "titleNoFormatting":"<strong>Ali Baba
> Carpets</strong>",
>         "url":"http://link5.com"}]}

Я пытаюсь разобрать ее с помощью:

import java.util.List;

public class ParseOffers {
    private List<results> results;

    public static class cursor {
        private int currentPageIndex;
        private int estimatedResultCount;
        private pages Pages;
        private String ResponseDetails;
        private int ResponseStatus;

        public class pages {
            private int label;
            private int start;
        }
    }

    public static class results {
        private int Accuracy;
        private addressLines AddressLines;
        private String city;
        private String country;
        private String ddUrl;
        private String ddUrlFromHere;
        private String ddUrlToHere;
        private double lat;
        private double lng;
        private phoneNumbers data;
        private String region;
        private String staticMapUrl;
        private String streetAddress;
        private String title;
        private String titleNoFormatting;
        private String url;

        public class addressLines {
            private String Address1;
            private String Address2;
            private String Address3;
            private String Address4;
            private String Address5;
            private String Postcode;
        }

        public class phoneNumbers {
            private String number;
            private String type;
        }

    }
}

Спасибо.

1 Ответ

1 голос
/ 28 июня 2011

Проблема заключается просто в том, что структура данных Java не соответствует JSON, несколькими различными способами, включая отсутствие поля для курсора и наличие имен полей, которые не соответствуют именам элементов JSON.

Вот минимально модифицированная версия структуры данных Java, которая соответствует JSON.

public class ParseOffers
{
  private cursor cursor;
  private List<results> results;

  public static class cursor
  {
    private int currentPageIndex;
    private int estimatedResultCount;
    private pages pages;
    private String responseDetails;
    private int responseStatus;

    public class pages
    {
      private int label;
      private int start;
    }
  }

  public static class results
  {
    private int accuracy;
    private addressLines addressLines;
    private String city;
    private String country;
    private String ddUrl;
    private String ddUrlFromHere;
    private String ddUrlToHere;
    private double lat;
    private double lng;
    private phoneNumbers phoneNumbers;
    private String region;
    private String staticMapUrl;
    private String streetAddress;
    private String title;
    private String titleNoFormatting;
    private String url;

    public class addressLines
    {
      private String Address1;
      private String Address2;
      private String Address3;
      private String Address4;
      private String Address5;
      private String Postcode;
    }

    public class phoneNumbers
    {
      private String number;
      private String type;
    }

  }
}

Хотя эта структура данных Java работает, у нее все еще есть странности, которые я бы изменил.

Странно, что некоторые из вложенных классов являются статическими, а некоторые нет. Я бы изменил его, чтобы не было вложенных классов.

Странно, что некоторые имена классов точно совпадают с именами полей (и элементов JSON). Я бы использовал более распространенные соглашения об именах. Например, я бы изменил имя класса курсора на «Курсор».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...