Я хочу преобразовать мой объект json в мой java-объект, используя fromJson () из GSON

1

У меня есть 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.

Теги:
gson

3 ответа

0
Лучший ответ

Первый [ в вашем 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
    }
  ]
}
  • 0
    Это помогло мне .. я только что снял квадратные скобки вокруг объекта json. Спасибо.
0

Когда вы используете 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
  • 0
    Я получил этот внутренний массив order_details и его базовый объект, просто переименовав orderList в order_details.you решил мою другую проблему. Спасибо
  • 0
    Я хотел бы отметить как правильный ответ, но я могу выбрать только один. и исключение com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидалось BEGIN_OBJECT, но было BEGIN_ARRAY в столбце 2 строки 1, было решено предложением Syam S, которое я фактически упомянул в своем вопросе.
0

Строка 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);  

Пусть это поможет вам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню