【问题标题】:Java gson arrays of arrays: java.lang.IllegalStateExceptionJava gson数组数组:java.lang.IllegalStateException
【发布时间】:2014-04-30 19:18:17
【问题描述】:

我正在尝试反序列化以下 JSON:

[{
    "customerDetails":
          {
            "customer_name": "name",
            "customer_email": "email"
          },
    "shippingD‌​etails":
          {
            "shipping_contact": "name",
            "shipping_street": "Av:"
          }
}] 
Array
 (
    [0] => Array
            (
               [customerDetails] => Array
            (
                [customer_name] => name
                [customer_email] => email             
            )
        [shippingDetails] => Array
            (
                [shipping_contact] => shipname
                [shipping_street] => Av:Name                 
            )
   )
)

这是我的课程:

public class Order {
    private List<CustomerDetail> customerDetail;
    private List<Shipping> shipping;
    //getters and setters
}
public class Shipping {
    private String contact;
    private String street;
    //getters and setters
}
public class CustomerDetail{
    private String name;
    private String email;
    //getters and setters
}

我试过了:

Gson g = new Gson();        
Order[] order = g.fromJson(new FileReader("jason"), Order[].class);
List <CustomerDetail> cd = order[0].getCustomerDetail();
System.out.println(cd.get(0).getName());

但我一直在 NullPointer

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2

【问题讨论】:

  • 我可能不正确,但对我来说不像json
  • 我只是格式化得更好:[{"customerDetails":{"customer_name":"name","customer_email":"email"},"shippingDetails":{"shipping_contact":"name" ,"shipping_street":"Av:"}]

标签: java arrays json serialization gson


【解决方案1】:

您的 Java 与 JSON 不匹配,并且错误消息告诉您您正在尝试解析对象而不是数组(尽管您使用 Gson 显示的代码不会引发异常)。我也不确定您在 JSON 下显示的内容是什么,因为它也与 JSON 没有任何相似之处。

您的 JSON 是一个数组。该数组包含一个对象(可能您希望它具有许多这些,但它显示了一个)。该对象有两个字段; customerDetailsshippingD‌​etails 分别持有另一个对象。

您的 Orders 课程需要是:

public class Orders {
    private CustomerDetail customerDetails;
    private Shipping shippingDetails;
}

(鉴于它看起来像 single 顺序,我会放弃复数并将类命名为 Order

然后您可以通过以下方式使用 Gson 解析该 JSON:

Orders[] orders = new Gson().fromJson(myJson, Orders[].class);

【讨论】:

  • 会有更多订单:) thnaks
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
相关资源
最近更新 更多