我正在尝试使用我的Android应用程序上的GSON库解析JSON.我可以正确解析一个JSON数组,但现在我需要用这个结构解析另一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
和一个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;
}
Run Code Online (Sandbox Code Playgroud)
}
而且,在我的主要活动中,我尝试获取所有信息:
final Gson gson = new Gson();
Order o = gson.fromJson(jsonData, Order.class);
System.out.println(" - " + o.getOrderId() );
Run Code Online (Sandbox Code Playgroud)
并且工作正常,但如果我想获取文章信息,则值为空,我不知道如何获取它.
我试着用这样的东西:
Type collectionType = new TypeToken<List<Merchants>>() {
}.getType();
data = gson.fromJson(response, collectionType);
Run Code Online (Sandbox Code Playgroud)
我尝试使用ArticlesWrapper,但我不知道该怎么做.但我想我忘了什么......我不知道是什么.在应用程序的另一部分,我正确反序列化一个JSON,因为它是一个数组,但在这种情况下,我不知道如何才能正确获取所有数据.
如果您需要更多信息,我会为您提供!谢谢!
Ale*_*lex 12
这是因为您没有正确地将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
Run Code Online (Sandbox Code Playgroud)
因此,最终应该有6个Java POJO,GSon应该能够在反序列化JSON数据时填充它们.
我刚刚在这里将你的JSON结构翻译成了POJO,我让Dates as 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());
}
}
Run Code Online (Sandbox Code Playgroud)
订购
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
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
文章
public class Article {
private int articleId;
private String articleName;
private int merchantId;
private double price;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
顾客
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
}
Run Code Online (Sandbox Code Playgroud)
设备
public class Device {
private int customerId;
private String deviceId;
private String phone;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
地点
public class Location {
private String location;
private int locationId;
private int shopId;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
产量
orderId: 203
first article price: 3.5
second article status: AS01_INITIAL
third article requested date: 2012-11-19 13:15:20
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |