2011-06-27 191 views
0

我会保持简短,我有一个问题,一些非常糟糕的布局Json(从我可以告诉无论如何),我从Web服务撤回,新来的Java /安卓/ JSON,因此我们将感激地收到任何帮助,将JSON的结构是:解析奇怪的构造Json/Gson

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

    } 
} 

谢谢。

+0

你如何解析它?手工或使用标准库? org.json'包中的adroid sdk应该能够解析这种东西:[javadoc] –

+0

@Aleks G(http://developer.android.com/reference/org/json/package-summary.html) - OP说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元素)名称完全匹配。我会使用更常见的命名约定。例如,我会将“光标”类的名称更改为“光标”。

+0

干杯。奇怪的是,嵌套类没有实际的原因,我实际上是DBA并编写了Web服务(它使用.Net json库来创建它),但是调用它的第三方要求我们以这种方式格式化。 –