我正在尝试反序列化以下 JSON:
[{
"customerDetails":
{
"customer_name": "name",
"customer_email": "email"
},
"shippingDetails":
{
"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
)
)
)
这是我的类(class):
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
最佳答案
您的 Java 与 JSON 不匹配,并且错误消息告诉您您正在尝试解析对象而不是数组(尽管您使用 Gson 显示的代码不会抛出异常)。我也不确定您在 JSON 下显示的内容是什么,因为它也与 JSON 没有相似之处。
您的 JSON 是一个数组。该数组包含一个对象(大概您希望它有很多这样的对象,但它按原样显示一个)。该对象有两个字段; customerDetails
和 shippingDetails
各自包含另一个对象。
您的 Orders
类需要是:
public class Orders {
private CustomerDetail customerDetails;
private Shipping shippingDetails;
}
(鉴于它看起来像是一个单个订单,我会删除复数并将该类命名为Order
)
然后您可以通过以下方式使用 Gson 解析该 JSON:
Orders[] orders = new Gson().fromJson(myJson, Orders[].class);
关于Java gson 数组的数组 : java. lang.IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23396321/