试图用GSONparsingJSON

我想parsing我的Android应用程序上的GSON库的JSON。 我可以正确parsing一个JSON数组,但现在我需要parsing另一个JSON,这个结构体:

{ "articles": [ { "article": { "articleId": 1, "articleName": "Bocadillo de calamares", "merchantId": 2, "price": 3.5 }, "computable": true, "orderArticleId": 3157, "orderId": 203, "price": 3.5, "requestedDate": "2012-11-19 13:15:20", "shared": true, "status": "AS01_INITIAL" }, { "article": { "articleId": 3, "articleName": "Desayuno", "merchantId": 2, "price": 2.2 }, "computable": true, "orderArticleId": 3158, "orderId": 203, "price": 0, "requestedDate": "2012-11-19 13:17:30", "shared": true, "status": "AS01_INITIAL" }, { "article": { "articleId": 2, "articleName": "Café", "merchantId": 2, "price": 1.1 }, "computable": true, "orderArticleId": 3156, "orderId": 203, "price": 1.1, "requestedDate": "2012-11-19 13:15:20", "shared": true, "status": "AS01_INITIAL" }, { "article": { "articleId": 1, "articleName": "Bocadillo de calamares", "merchantId": 2, "price": 3.5 }, "computable": true, "orderArticleId": 3155, "orderId": 203, "price": 3.5, "requestedDate": "2012-11-19 12:40:17", "shared": true, "status": "AS01_INITIAL" } ], "comment": null, "creationDate": "2012-11-19 12:06:41", "customer": { "creationDate": 1353321506000, "customerId": 152, "devices": [ { "customerId": 152, "deviceId": "2000", "phone": null } ], "image": false, "mail": null, "name": null, "password": null }, "finishDate": null, "group": 0, "groupOrders": [], "location": { "location": "Table 1", "locationId": 1, "shopId": 2 }, "orderId": 203, "parentOrderId": 192, "score": null, "shopId": 2, "status": "OS01_INITIAL", "ticketUrl": null, "tip": null, "total": 0, "totalArticles": 0, "type": "BILL" } I have a Order.class like this: public class Order { private final String orderId; (....) private final ArrayList<Articles> articles; private final String group; public Order() { orderId = ""; (....) articles = new ArrayList<Articles>(); group = ""; } public String getOrderId() { return orderId; } (... All getters for each element) public ArrayList<Articles> getArticles() { return articles; } } 

和一个Articles.class

 public class Articles { private final String orderArticleId; (...) private final ArrayList<Article> article; public Articles() { orderArticleId = ""; (....) article = new ArrayList<Article>(); }; public String getPrice() { return price; } (....All getters for each element) public ArrayList<Article> getArticle() { return article; } 

}

而且,在我的主要活动中,我尝试获取所有这些信息:

  final Gson gson = new Gson(); Order o = gson.fromJson(jsonData, Order.class); System.out.println(" - " + o.getOrderId() ); 

和工作正常,但如果我想获得文章信息,值为空,我不知道我怎么能得到它。

我尝试这样的事情:

  Type collectionType = new TypeToken<List<Merchants>>() { }.getType(); data = gson.fromJson(response, collectionType); 

我尝试使用ArticlesWrapper,但我不知道如何去做。 但我想我忘记了一些东西,而我不知道是什么。 在应用程序的另一部分,我正确地反序列化一个JSON,因为它是一个数组,但在这种情况下,我不知道如何才能正确获取所有的数据。

如果您需要更多信息,我会为您提供! 谢谢!

Solutions Collecting From Web of "试图用GSONparsingJSON"

这是因为您没有正确地将JSON结构转换为Java POJO,基本上忽略了一些具有以下结构的字段。

 + Order + List<BigArticle> articles + Customer customer + Location location + other basic fields + BigArticle + Article article + other basic fields + Article + basic fields + Customer + List<Device> devices + other basic fields + Device + basic fields + Location + basic fields 

所以最终应该有6个Java POJO,GSon应该能够在反序列化JSON数据的时候填充这些POJO。

我只是在这里将你的JSON结构转换为POJO,而且我已经把Dates作为String来简化分析。 如果您想要正确填充java.util.Date ,则必须自定义GSon实例。

主要类

 public class Main { public static void main(String[] args) { String jsonData = "..."; final Gson gson = new Gson(); Order o = gson.fromJson(jsonData, Order.class); System.out.println("orderId: " + o.getOrderId()); System.out.println("first article price: " + o.getArticles().get(0).getPrice()); System.out.println("second article status: " + o.getArticles().get(1).getStatus()); System.out.println("third article requested date: " + o.getArticles().get(2).getRequestedDate()); } } 

订购

 public class Order { private List<BigArticle> articles; private String comment; private String creationDate; private Customer customer; private String finishDate; private int group; private List<Integer> groupOrders; private Location location; private int orderId; private int parentOrderId; private int score; private int shopId; private String status; private String ticketUrl; private String tip; private int total; private int totalArticles; private String type; // getters and setters } 

BigArticle

 public class BigArticle { private Article article; private boolean computable; private int orderArticleId; private int orderId; private double price; private String requestedDate; private boolean shared; private String status; // getters and setters } 

文章

 public class Article { private int articleId; private String articleName; private int merchantId; private double price; // getters and setters } 

顾客

 public class Customer { private long creationDate; private int customerId; private List<Device> devices; private boolean image; private String mail; private String name; private String password; // getters and setters } 

设备

 public class Device { private int customerId; private String deviceId; private String phone; // getters and setters } 

位置

 public class Location { private String location; private int locationId; private int shopId; // getters and setters } 

产量

 orderId: 203 first article price: 3.5 second article status: AS01_INITIAL third article requested date: 2012-11-19 13:15:20