У меня есть json-объект:
[
{
"created_at": "2014-07-01 5:01:10",
"status": "in progress",
"device_id": "1234",
"order_details": [
{
"item_id": 1,
"quantity": 2
},
{
"item_id": 2,
"quantity": 3
}
]
}
]
И в java у меня есть два порядка заказа и детали заказа как вот так:
1) Order.java
package dto;
import java.util.ArrayList;
public class Order
{
int order_id;
String created_at;
String status;
String device_id;
ArrayList<Order_details> orderList= new ArrayList<Order_details>();
public int getOrder_id() {
return order_id;
}
public void setOrder_id(int order_id) {
this.order_id = order_id;
}
public String getCreated_at() {
return created_at;
}
public void setCreated_at(String created_at) {
this.created_at = created_at;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getDevice_id() {
return device_id;
}
public void setDevice_id(String device_id) {
this.device_id = device_id;
}
public ArrayList<Order_details> getOrderList() {
return orderList;
}
public void setOrderList(ArrayList<Order_details> orderList) {
this.orderList = orderList;
}
public void attachOrderDetails(ArrayList<Order_details> member) {
this.orderList = member;
}
}
2) Order_details.java
package dto;
public class Order_details
{
int item_id;
int quantity;
String item_name;
double price;
public int getItem_id()
{
return item_id;
}
public void setItem_id(int item_id)
{
this.item_id = item_id;
}
public int getQuantity()
{
return quantity;
}
public void setQuantity(int quantity)
{
this.quantity = quantity;
}
public String getItem_name()
{
return item_name;
}
public void setItem_name(String item_name)
{
this.item_name = item_name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
теперь я хочу преобразовать выше json-объект в объект класса заказа. Чтобы достичь этого, я пробовал его:
Order order= new Order();
order= gs.fromJson(json,Order.class);
System.out.println("order"+order);
но это исключает следующее:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapte rFactory.java:176)
at com.google.gson.Gson.fromJson(Gson.java:791)
at com.google.gson.Gson.fromJson(Gson.java:757)
at com.google.gson.Gson.fromJson(Gson.java:706)
at com.google.gson.Gson.fromJson(Gson.java:678)
Пожалуйста, помогите мне преобразовать мой json в объект java.
Первый [
в вашем json говорит, что он держит массив или объекты Order. Поэтому вам нужно составить список заказов, а не один класс заказа.
List<Order> order = new ArrayList<Order>();
order = gs.fromJson(json, order.getClass());
System.out.println("order" + order);
Или используя токен типа
List<Order> order = new ArrayList<Order>();
Type listType = new TypeToken<List<Order>>() {}.getType();
order = gs.fromJson(json, listType);
System.out.println("order" + order);
Альтернативно, чтобы работать с вашим кодом прямо, вам нужно изменить свой json на
{
"created_at": "2014-07-01 5:01:10",
"status": "in progress",
"device_id": "1234",
"order_details": [
{
"item_id": 1,
"quantity": 2
},
{
"item_id": 2,
"quantity": 3
}
]
}
Когда вы используете GSON, вам следует больше узнать о ключевом имени и имени переменной с учетом регистра.
either change variable name to
ArrayList<Order_details> order_details= new ArrayList<Order_details>(); instead of
ArrayList<Order_details> orderList= new ArrayList<Order_details>();
or
change json key name to orderList instead of order_details
Строка JSON не может быть передана непосредственно вашему классу, потому что ваш json содержит массив параметров класса Order
и для преобразования его в объект класса вам нужен список класса Order
чтобы этот массив можно преобразовать в список Order
.
Для этого вам нужно взять List<Order>
класса Order, как показано ниже:
List<Order> orderList = new ArrayList<Order>();
Type listType = new TypeToken<List<Order>>(){}.getType();
orderList = json.fromJson(jsonStr, listType);
Пусть это поможет вам.