Java 应为BEGIN_对象,但在第1行第2列为BEGIN_数组(小编辑)
我这里有一个web服务,它为我提供了以下JSON代码:Java 应为BEGIN_对象,但在第1行第2列为BEGIN_数组(小编辑),java,android,json,web-services,Java,Android,Json,Web Services,我这里有一个web服务,它为我提供了以下JSON代码: [ { "_OrderDetails": [ { "ProductName": "FUCHS SUPER GT SAE 10W30 6X5 / FP10100010102", "TotalAfterDiscount_Lc": "7500", "MeasureUnitName": "كرتونة", "TotalPrice_Lc": "7500",
[
{
"_OrderDetails": [
{
"ProductName": "FUCHS SUPER GT SAE 10W30 6X5 / FP10100010102",
"TotalAfterDiscount_Lc": "7500",
"MeasureUnitName": "كرتونة",
"TotalPrice_Lc": "7500",
"PricePerUnit_Lc": "75",
"Quantity": "100"
}
],
"Id": "274",
"OrderDate": "4/10/2014 12:00:00 AM",
"Number": "16",
"CustomerName": "الأسد",
"Note": ""
}
]
我制作了一个java类(实体),其中包含所有数据的getter和setter:
package com.example.webservicetest;
import java.util.List;
public class Item {
private String OrderDate;
private String Number;
private String Note;
private String CustomerName;
private String Id;
private List<_OrderDetails> orderDetails;
public String getOrderDate() {
return OrderDate;
}
public void setOrderDate(String orderDate) {
OrderDate = orderDate;
}
public String getNumber() {
return Number;
}
public void setNumber(String number) {
Number = number;
}
public String getNote() {
return Note;
}
public void setNote(String note) {
Note = note;
}
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getCustomerName() {
return CustomerName;
}
public void setCustomerName(String customerName) {
CustomerName = customerName;
}
public List<_OrderDetails> getOrderDetails() {
return orderDetails;
}
public void setOrderDetails(List<_OrderDetails> orderDetails) {
this.orderDetails = orderDetails;
}
public class _OrderDetails{
private String OrderId;
private String OrderDate;
private String Number;
private String Note;
private String ProductName;
private String TotalAfterDiscount_Lc;
private String MeasureUnitName;
private String TotalPrice_Lc;
private String PricePerUnit_Lc;
private String Quantity;
public String getOrderId() {
return OrderId;
}
public void setOrderId(String orderId) {
OrderId = orderId;
}
public String getOrderDate() {
return OrderDate;
}
public void setOrderDate(String orderDate) {
OrderDate = orderDate;
}
public String getNumber() {
return Number;
}
public void setNumber(String number) {
Number = number;
}
public String getNote() {
return Note;
}
public void setNote(String note) {
Note = note;
}
public String getProductName() {
return ProductName;
}
public void setProductName(String productName) {
ProductName = productName;
}
public String getTotalAfterDiscount_Lc() {
return TotalAfterDiscount_Lc;
}
public void setTotalAfterDiscount_Lc(String totalAfterDiscount_Lc) {
TotalAfterDiscount_Lc = totalAfterDiscount_Lc;
}
public String getMeasureUnitName() {
return MeasureUnitName;
}
public void setMeasureUnitName(String measureUnitName) {
MeasureUnitName = measureUnitName;
}
public String getTotalPrice_Lc() {
return TotalPrice_Lc;
}
public void setTotalPrice_Lc(String totalPrice_Lc) {
TotalPrice_Lc = totalPrice_Lc;
}
public String getPricePerUnit_Lc() {
return PricePerUnit_Lc;
}
public void setPricePerUnit_Lc(String pricePerUnit_Lc) {
PricePerUnit_Lc = pricePerUnit_Lc;
}
public String getQuantity() {
return Quantity;
}
public void setQuantity(String quantity) {
Quantity = quantity;
}
}
}
但我在日志中看到以下例外情况:
应为BEGIN_对象,但在第1行第2列为BEGIN_数组
请问我做错了什么?查看您的代码,获取
项
对象的正确方法是
Item[] placelist = gson.fromJson(responseJSON, Item[].class);
因为您的JSON是一个项对象列表[
(BEGIN\u数组)
引发异常,因为Gson需要单个项对象{
(BEGIN\u对象),但它是数组
不能以两种方式反序列化同一个JSON,即数组和对象。如果JSON是数组,则将其反序列化为数组;如果JSON是对象,则将其反序列化为对象,但不能以两种方式反序列化。JSON输出是一个列表
// This parses your JSON
Item[] items = new Gson().fromJson(responseJson, Item[].class);
在此之后,实际上您将拥有一个项目数组,因为您拥有的是一个对象数组,而不是一个对象。这就是为什么第二行可以工作,第三行不能工作的原因。因此,如果您想将此json解析为一个项目[]placelist,则无需更改任何内容。如果您想将其解析为一个对象,则应删除以下括号:
Item[] placelist;
placelist = gson.fromJson(responseJSON, Item[].class);
Item item = gson.fromJson(responseJSON, Item.class);
{
"_OrderDetails": [
{
"ProductName": "FUCHS SUPER GT SAE 10W30 6X5 / FP10100010102",
"TotalAfterDiscount_Lc": "7500",
"MeasureUnitName": "كرتونة",
"TotalPrice_Lc": "7500",
"PricePerUnit_Lc": "75",
"Quantity": "100"
}
],
"Id": "274",
"OrderDate": "4/10/2014 12:00:00 AM",
"Number": "16",
"CustomerName": "الأسد",
"Note": ""
}
或者像数组一样解析它并检索第一个元素
更新
Item[] placelist = gson.fromJson(responseJSON, Item[].class);
工作正常,并且您有一个项目数组。但是OrderDetails的名称有问题。在json中,它是一个“\u OrderDetails”,在代码中是“OrderDetails”。您可以在字段上添加注释:
@SerializedName("_OrderDetails")
private List<_OrderDetails> orderDetails;
@SerializedName(“\u OrderDetails”)
私人名单详情;
要测试的完整代码:
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
String responseJSON = "[\n" +
" {\n" +
" \"_OrderDetails\": [\n" +
" {\n" +
" \"ProductName\": \"FUCHS SUPER GT SAE 10W30 6X5 / FP10100010102\",\n" +
" \"TotalAfterDiscount_Lc\": \"7500\",\n" +
" \"MeasureUnitName\": \"كرتونة\",\n" +
" \"TotalPrice_Lc\": \"7500\",\n" +
" \"PricePerUnit_Lc\": \"75\",\n" +
" \"Quantity\": \"100\"\n" +
" }\n" +
" ],\n" +
" \"Id\": \"274\",\n" +
" \"OrderDate\": \"4/10/2014 12:00:00 AM\",\n" +
" \"Number\": \"16\",\n" +
" \"CustomerName\": \"الأسد\",\n" +
" \"Note\": \"\"\n" +
" }\n" +
"]";
Item[] placelist;
Gson gson = new Gson();
placelist = gson.fromJson(responseJSON, Item[].class);
System.out.println(Arrays.toString(placelist));
}
public class Item {
private String OrderDate;
private String Number;
private String Note;
private String CustomerName;
private String Id;
@SerializedName("_OrderDetails")
private List<_OrderDetails> orderDetails;
public String getOrderDate() {
return OrderDate;
}
public void setOrderDate(String orderDate) {
OrderDate = orderDate;
}
public String getNumber() {
return Number;
}
public void setNumber(String number) {
Number = number;
}
public String getNote() {
return Note;
}
public void setNote(String note) {
Note = note;
}
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getCustomerName() {
return CustomerName;
}
public void setCustomerName(String customerName) {
CustomerName = customerName;
}
public List<_OrderDetails> getOrderDetails() {
return orderDetails;
}
public void setOrderDetails(List<_OrderDetails> orderDetails) {
this.orderDetails = orderDetails;
}
@Override
public String toString() {
return "Item{" +
"OrderDate='" + OrderDate + '\'' +
", Number='" + Number + '\'' +
", Note='" + Note + '\'' +
", CustomerName='" + CustomerName + '\'' +
", Id='" + Id + '\'' +
", orderDetails=" + orderDetails +
'}';
}
public class _OrderDetails {
private String OrderId;
private String OrderDate;
private String Number;
private String Note;
private String ProductName;
private String TotalAfterDiscount_Lc;
private String MeasureUnitName;
private String TotalPrice_Lc;
private String PricePerUnit_Lc;
private String Quantity;
public String getOrderId() {
return OrderId;
}
public void setOrderId(String orderId) {
OrderId = orderId;
}
public String getOrderDate() {
return OrderDate;
}
public void setOrderDate(String orderDate) {
OrderDate = orderDate;
}
public String getNumber() {
return Number;
}
public void setNumber(String number) {
Number = number;
}
public String getNote() {
return Note;
}
public void setNote(String note) {
Note = note;
}
public String getProductName() {
return ProductName;
}
public void setProductName(String productName) {
ProductName = productName;
}
public String getTotalAfterDiscount_Lc() {
return TotalAfterDiscount_Lc;
}
public void setTotalAfterDiscount_Lc(String totalAfterDiscount_Lc) {
TotalAfterDiscount_Lc = totalAfterDiscount_Lc;
}
public String getMeasureUnitName() {
return MeasureUnitName;
}
public void setMeasureUnitName(String measureUnitName) {
MeasureUnitName = measureUnitName;
}
public String getTotalPrice_Lc() {
return TotalPrice_Lc;
}
public void setTotalPrice_Lc(String totalPrice_Lc) {
TotalPrice_Lc = totalPrice_Lc;
}
public String getPricePerUnit_Lc() {
return PricePerUnit_Lc;
}
public void setPricePerUnit_Lc(String pricePerUnit_Lc) {
PricePerUnit_Lc = pricePerUnit_Lc;
}
public String getQuantity() {
return Quantity;
}
public void setQuantity(String quantity) {
Quantity = quantity;
}
@Override
public String toString() {
return "_OrderDetails{" +
"OrderId='" + OrderId + '\'' +
", OrderDate='" + OrderDate + '\'' +
", Number='" + Number + '\'' +
", Note='" + Note + '\'' +
", ProductName='" + ProductName + '\'' +
", TotalAfterDiscount_Lc='" + TotalAfterDiscount_Lc + '\'' +
", MeasureUnitName='" + MeasureUnitName + '\'' +
", TotalPrice_Lc='" + TotalPrice_Lc + '\'' +
", PricePerUnit_Lc='" + PricePerUnit_Lc + '\'' +
", Quantity='" + Quantity + '\'' +
'}';
}
}
}
import com.google.gson.gson;
导入com.google.gson.annotations.SerializedName;
导入java.util.array;
导入java.util.List;
公共班机{
公共静态void main(字符串[]args){
字符串responseJSON=“[\n”+
“{\n”+
“\”\u OrderDetails\”:[\n”+
“{\n”+
“\'ProductName\:\'FUCHS SUPER GT SAE 10W30 6X5/FP1010000102\',\n”+
“TotalAfterDiscount\u Lc\”:“7500\”,\n+
“度量单位名称”:“度量单位名称”+
“\'TotalPrice\u Lc\”:\'7500\,\n”+
“\'PricePerUnit\u Lc\”:\'75\,\n”+
“\”数量\“:\”100\“\n”+
“}\n”+
“],\n”+
“\“Id\:\“274\”,\n”+
“\'OrderDate\':\'2014年10月4日上午12:00:00\',\n”+
“\”数字\“:\”16\“,\n”+
“客户名称”:“客户名称”+
“\”注意\“:\”\“\n”+
“}\n”+
"]";
项目[]位置列表;
Gson Gson=新的Gson();
placelist=gson.fromJson(responseJSON,Item[].class);
System.out.println(Arrays.toString(placelist));
}
公共类项目{
私有字符串OrderDate;
私有字符串编号;
私人弦乐;
私有字符串客户名称;
私有字符串Id;
@SerializedName(“\u OrderDetails”)
私人名单详情;
公共字符串getOrderDate(){
退货日期;
}
public void setOrderDate(字符串orderDate){
OrderDate=OrderDate;
}
公共字符串getNumber(){
返回号码;
}
公共无效集合号(字符串号){
数字=数字;
}
公共字符串getNote(){
退货单;
}
公共无效设置注释(字符串注释){
注=注;
}
公共字符串getId(){
返回Id;
}
公共无效集合id(字符串id){
Id=Id;
}
公共字符串getCustomerName(){
返回客户名称;
}
public void setCustomerName(字符串customerName){
客户名称=客户名称;
}
公共列表getOrderDetails(){
退货订单详情;
}
public void setOrderDetails(列出orderDetails){
this.orderDetails=orderDetails;
}
@凌驾
公共字符串toString(){
返回“项目{”+
“OrderDate=”+OrderDate+“\”+
“,数字=”“+Number+”\“””+
,Note='+Note+'\''+
“,CustomerName=”“+CustomerName+”\''+
“,Id=”+Id+“\”+
“,orderDetails=“+orderDetails+
'}';
}
公共类_OrderDetails{
私有字符串OrderId;
私有字符串OrderDate;
私有字符串编号;
私人弦乐;
私有字符串产品名称;
私人字符串TotalAfterDiscount\u Lc;
私有字符串MeasureUnitName;
私人字符串TotalPrice_Lc;
私人字符串PricePerUnit\u Lc;
私有字符串数量;
公共字符串getOrderId(){
返回订单ID;
}
公共无效setOrderId(字符串orderId){
OrderId=OrderId;
}
公共字符串getOrderDate(){
退货日期;
}
public void setOrderDate(字符串orderDate){
OrderDate=OrderDate;
}
公共字符串getNumber(){
返回号码;
}
公共无效集合号(字符串号){
数字=数字;
}
公共字符串getNote(){
退货单;
}
公共无效设置注释(字符串注释){
注=注;
}
公共字符串getProductName(){
返回产品名称;
}
公共无效setProductName(字符串productName){
ProductName=ProductName;
}
公共字符串getTotalAfterDiscount_Lc(){
返回总折扣(信用证);;
}
public void setTotalAfterDiscount\u Lc(字符串totalAfterDiscount\u Lc){
TotalAfterDiscount\u Lc=TotalAfterDiscount\u Lc;
}
公共字符串getMeasureUnitName(){
返回MeasureUnitName;
}
塞特米阿苏公共空间
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
String responseJSON = "[\n" +
" {\n" +
" \"_OrderDetails\": [\n" +
" {\n" +
" \"ProductName\": \"FUCHS SUPER GT SAE 10W30 6X5 / FP10100010102\",\n" +
" \"TotalAfterDiscount_Lc\": \"7500\",\n" +
" \"MeasureUnitName\": \"كرتونة\",\n" +
" \"TotalPrice_Lc\": \"7500\",\n" +
" \"PricePerUnit_Lc\": \"75\",\n" +
" \"Quantity\": \"100\"\n" +
" }\n" +
" ],\n" +
" \"Id\": \"274\",\n" +
" \"OrderDate\": \"4/10/2014 12:00:00 AM\",\n" +
" \"Number\": \"16\",\n" +
" \"CustomerName\": \"الأسد\",\n" +
" \"Note\": \"\"\n" +
" }\n" +
"]";
Item[] placelist;
Gson gson = new Gson();
placelist = gson.fromJson(responseJSON, Item[].class);
System.out.println(Arrays.toString(placelist));
}
public class Item {
private String OrderDate;
private String Number;
private String Note;
private String CustomerName;
private String Id;
@SerializedName("_OrderDetails")
private List<_OrderDetails> orderDetails;
public String getOrderDate() {
return OrderDate;
}
public void setOrderDate(String orderDate) {
OrderDate = orderDate;
}
public String getNumber() {
return Number;
}
public void setNumber(String number) {
Number = number;
}
public String getNote() {
return Note;
}
public void setNote(String note) {
Note = note;
}
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getCustomerName() {
return CustomerName;
}
public void setCustomerName(String customerName) {
CustomerName = customerName;
}
public List<_OrderDetails> getOrderDetails() {
return orderDetails;
}
public void setOrderDetails(List<_OrderDetails> orderDetails) {
this.orderDetails = orderDetails;
}
@Override
public String toString() {
return "Item{" +
"OrderDate='" + OrderDate + '\'' +
", Number='" + Number + '\'' +
", Note='" + Note + '\'' +
", CustomerName='" + CustomerName + '\'' +
", Id='" + Id + '\'' +
", orderDetails=" + orderDetails +
'}';
}
public class _OrderDetails {
private String OrderId;
private String OrderDate;
private String Number;
private String Note;
private String ProductName;
private String TotalAfterDiscount_Lc;
private String MeasureUnitName;
private String TotalPrice_Lc;
private String PricePerUnit_Lc;
private String Quantity;
public String getOrderId() {
return OrderId;
}
public void setOrderId(String orderId) {
OrderId = orderId;
}
public String getOrderDate() {
return OrderDate;
}
public void setOrderDate(String orderDate) {
OrderDate = orderDate;
}
public String getNumber() {
return Number;
}
public void setNumber(String number) {
Number = number;
}
public String getNote() {
return Note;
}
public void setNote(String note) {
Note = note;
}
public String getProductName() {
return ProductName;
}
public void setProductName(String productName) {
ProductName = productName;
}
public String getTotalAfterDiscount_Lc() {
return TotalAfterDiscount_Lc;
}
public void setTotalAfterDiscount_Lc(String totalAfterDiscount_Lc) {
TotalAfterDiscount_Lc = totalAfterDiscount_Lc;
}
public String getMeasureUnitName() {
return MeasureUnitName;
}
public void setMeasureUnitName(String measureUnitName) {
MeasureUnitName = measureUnitName;
}
public String getTotalPrice_Lc() {
return TotalPrice_Lc;
}
public void setTotalPrice_Lc(String totalPrice_Lc) {
TotalPrice_Lc = totalPrice_Lc;
}
public String getPricePerUnit_Lc() {
return PricePerUnit_Lc;
}
public void setPricePerUnit_Lc(String pricePerUnit_Lc) {
PricePerUnit_Lc = pricePerUnit_Lc;
}
public String getQuantity() {
return Quantity;
}
public void setQuantity(String quantity) {
Quantity = quantity;
}
@Override
public String toString() {
return "_OrderDetails{" +
"OrderId='" + OrderId + '\'' +
", OrderDate='" + OrderDate + '\'' +
", Number='" + Number + '\'' +
", Note='" + Note + '\'' +
", ProductName='" + ProductName + '\'' +
", TotalAfterDiscount_Lc='" + TotalAfterDiscount_Lc + '\'' +
", MeasureUnitName='" + MeasureUnitName + '\'' +
", TotalPrice_Lc='" + TotalPrice_Lc + '\'' +
", PricePerUnit_Lc='" + PricePerUnit_Lc + '\'' +
", Quantity='" + Quantity + '\'' +
'}';
}
}
}
public class Item implements Serializable {
@SerializedName("_OrderDetails")
private OrderDetails[] mOrderDetails;
@SerializedName("Id")
private String mId;
@SerializedName("OrderData")
private String mOrderDate;
@SerializedName("Number")
private String mNumber;
@SerializedName("CustomerName")
private String mCustomerName;
@SerializedName("Note")
private String mNote;
// Add setters and getters
public static class OrderDetails implements Serializable {
@SerializedName("ProductName")
private String mProductName;
@SerializedName("TotalAfterDiscount_Lc")
private String mTotalAfterDiscount;
@SerializedName("MeasureUnitName")
private String mMeasureUnitName;
@SerializedName("TotalPrice_Lc"
private String mTotalPrice;
@SerializedName("PricePerUnit_Lc")
private String mPricePerUnit;
@SerializedName("Quantity")
private String mQuantity;
// Add setters and getters
}
}
Gson gson = new Gson();
Item item = gson.fromJson(json, Item.class);