【问题标题】:Parsing oddly constructed Json/Gson解析奇怪构造的 Json/Gson
【发布时间】:2011-06-27 16:15:45
【问题描述】:

我会保持简短,我遇到了一些布局非常糟糕的 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;
        }

    }
}

谢谢。

【问题讨论】:

  • 你是怎么解析的?手动还是使用标准库? org.jsonadroid sdk 中的包应该可以解析这种东西:javadoc
  • @Aleks G -- OP 说 Gson 正在被使用。显然处于数据绑定模式。

标签: json gson


【解决方案1】:

问题只是 Java 数据结构与 JSON 不匹配,有几种不同的方式,包括缺少光标字段,以及字段名称与 JSON 元素名称不匹配。

这是与 JSON 匹配的 Java 数据结构的最小修改版本。

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 元素)名称完全匹配,这很奇怪。我会使用更常见的命名约定。例如,我会将“cursor”类的名称更改为“Cursor”。

【讨论】:

  • 为此干杯。奇怪的是,嵌套类并没有真正的原因,我实际上是 DBA 并编写了 Web 服务(它使用 .Net json 库来创建它)但是第 3 方调用它的人要求我们以这种方式格式化它。
猜你喜欢
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多