Trying to parse JSON using GSON

I am trying to parse JSON with the GSON library in my Android application. I could parse the JSON array correctly, but now I need to parse another json with this structure:

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

And the .class article

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

}

And, in my main activity, I try to get all the information about it:

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

And it works fine, but if I want to get information about articles, the values ​​are zero, and I don't know how to get it.

I am trying something like this:

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

And I'm trying to use ArticleWrapper, but I don't know how to do it. But I think I'm forgetting something ... and I don't know what. In another part of the application, I am deserializing JSON correctly because it is an array, but in this case I do not know how to correctly get all the data.

If you need more information, I will provide you !. Thanks!

+7
source share
1 answer

This is because you are not correctly translating the JSON structure to Java POJO, basically omitting some fields, you have the following structure.

 + 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 

So, you should get 6 Java POJOs that GSon should be able to populate when deserializing JSON data.

I just translated your JSON structure into POJO and I gave Dates as String to simplify the parsing. If you want java.util.Date populate correctly, you will have to configure the GSon instance.

Main class

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

Order

 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 } 

Article

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

Client

 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 } 

Device

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

Location

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

Exit

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

All Articles