2015-09-22 2 views
2

им получать этот JSON в качестве ответа от сервера отдыха:Ожидаемое BEGIN_OBJECT но ЧИСЛО

{ 
    "externalOrderId":"5cb9bc46-aaa3-43ff-bb1a-6b17443f63ea", 
    "shortId":null, 
    "createdAt":1442255497402, 
    "updatedAt":1442255497402, 
    "cart":{ 
     "id":"gy4ectxb3db84epljzhisqrf" 
    } 
} 

Тогда, когда я пытаюсь разобрать этот JSON с помощью gson.fromJson, я получил ошибку:

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER at line 1 column 201 path $.createdAt 

здесь хау им делать это:

public Order getOrder(String externalOrderId) throws Exception { 
     HttpRequest request = new HttpRequestBuilder() 
      .setUrl(new URI(baseURL + "/order/" + externalOrderId)) 
      .build(); 

     return gson.fromJson(HttpResource.getInstance().get(request).getBody(), new TypeToken<Order>(){}.getType()); 
    } 

объекта Order:

private String externalOrderId; 
private Long shortId; 
private Date createdAt; 
private Date updatedAt; 

Заранее спасибо.

ответ

1

Ваши createdAt и updatedAt являются объектами Date, тогда как данные JSON имеют номера. Чтобы иметь возможность сопоставлять цифры, вам нужно будет createdAt и updatedAt также быть Long s и конвертировать их в Date объектов позже.

0

Try This (См ToString и longToDate metods в Order.java) -

Cart.java

public class Cart { 
    private String id; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    @Override 
    public String toString() { 
     return "Cart [id=" + id + "]"; 
    } 
} 

Order.java

import java.util.Date; 

public class Order { 
    private String externalOrderId; 
    private Long shortId; 
    private Long createdAt; 
    private Long updatedAt; 
    private Cart cart; 
    public String getExternalOrderId() { 
     return externalOrderId; 
    } 
    public void setExternalOrderId(String externalOrderId) { 
     this.externalOrderId = externalOrderId; 
    } 
    public Long getShortId() { 
     return shortId; 
    } 
    public void setShortId(Long shortId) { 
     this.shortId = shortId; 
    } 

    public Long getCreatedAt() { 
     return createdAt; 
    } 
    public void setCreatedAt(Long createdAt) { 
     this.createdAt = createdAt; 
    } 
    public Long getUpdatedAt() { 
     return updatedAt; 
    } 
    public void setUpdatedAt(Long updatedAt) { 
     this.updatedAt = updatedAt; 
    } 
    public Cart getCart() { 
     return cart; 
    } 
    public void setCart(Cart cart) { 
     this.cart = cart; 
    } 

    private Date longToDate(Long dt) { 
     return new Date(dt); 
    } 
    @Override 
    public String toString() { 
     return "Order [externalOrderId=" + externalOrderId + ", shortId=" 
       + shortId + ", createdAt=" + longToDate(createdAt) + ", updatedAt=" 
       + longToDate(updatedAt) + ", cart=" + cart + "]"; 
    } 
} 

Main.java

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 
import com.testgson.beans.Order; 

public class Main { 
    private static Gson gson; 

    static { 
     gson = new GsonBuilder().create(); 
    } 

    public static void main(String[] args) { 
     String j = "{\"externalOrderId\":\"5cb9bc46-aaa3-43ff-bb1a-6b17443f63ea\",\"shortId\":null,\"createdAt\":1442255497402,\"updatedAt\":1442255497402,\"cart\":{\"id\":\"gy4ectxb3db84epljzhisqrf\"}}"; 
     Order r = gson.fromJson(j, Order.class); 
     System.out.println(r); 
    } 
} 

Результат

Order [externalOrderId=5cb9bc46-aaa3-43ff-bb1a-6b17443f63ea, shortId=null, createdAt=Tue Sep 15 00:01:37 IST 2015, updatedAt=Tue Sep 15 00:01:37 IST 2015, cart=Cart [id=gy4ectxb3db84epljzhisqrf]] 
Смежные вопросы