[英]Convert a JSON String into Java Object
我有一个服务返回的字符串,其格式为JSON:
String message = {
"Tickets":
[{
"Type": "type1",
"Author": "author1",
"Rows":
[
{
"Price": "100.0",
"Date": "24/06/2016",
"Amount": "10"
},
{
"Type": "Comment",
"Value": "some comment goes here"
}
],
"ID": "165"
}],
"Desk": "desk1",
"User": "user1"
}
我需要解析它并转换成Java对象。 我试图创建一个这样的dom:
public class TicketWrapper{
private Ticket ticket;
private String desk;
private String user;
}
public class Ticket {
private String type;
private String author;
private List<Row> rows;
private String id;
}
public class Row1{
private float price;
private Date date;
private int amount;
}
public class Row2{
private String type;
private float value;
}
然后,我尝试通过Google Gson解析这种方式:
TicketWrapper ticket = gson.fromJson(message, TicketWrapper.class)
但是,如果我将其打印为System.out.println(gson.toJson(ticket))
,则会打印:{“ desk”:0,“ user”:0}
我不知道如何将Json解析为Java对象,以及如何告诉他进入“ Rows”的行可以是Row1类型或Row2类型。
正如其他人在评论中已经提到的那样,您需要确保映射直接反映文件名。 它必须是“用户”和“桌面”,而不是“用户”和“桌面”。 另外,您有一个票证列表,它将映射到“列出票证”。
我认为存在一些问题,例如小写的属性名称和dateformat以及行的混合类型。 我只是这样改变并为我工作:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import org.junit.Test;
import java.util.Date;
import java.util.List;
public class CheckTest {
@Test
public void thisTest() {
Gson gson = new GsonBuilder()
.setDateFormat("dd-MM-yyyy")
.setPrettyPrinting()
.create();
String message = "{\"Tickets\":" +
"[{\"Type\":\"type1\"," +
"\"Author\":\"author1\"," +
"\"Rows\":[{\"Price\":\"100.0\"," +
"\"Date\":\"24-06-2016\"," +
"\"Amount\":\"10\"}," +
"{\"Type\":\"Comment\"," +
"\"Value\":\"some comment goes here\"}]," +
"\"ID\":\"165\"}]," +
"\"Desk\":\"desk1\"," +
"\"User\":\"user1\"}";
TicketWrapper ticket = gson.fromJson(message, TicketWrapper.class);
System.out.println(ticket.toString());
}
public class TicketWrapper {
@SerializedName("Tickets")
private List<Ticket> tickets;
@SerializedName("Desk")
private String desk;
@SerializedName("User")
private String user;
public TicketWrapper() {
}
}
public class Ticket {
@SerializedName("Type")
private String type;
@SerializedName("Author")
private String author;
@SerializedName("Rows")
private List<Row> rows;
@SerializedName("ID")
private String id;
public Ticket() {
}
}
public class Row {
@SerializedName("Type")
private String type;
@SerializedName("Value")
private String value;
@SerializedName("Price")
private float price;
@SerializedName("Date")
private Date date;
@SerializedName("Amount")
private int amount;
public Row() {
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.