[英]kotlin com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
[英]com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
好的,所以我讀了其他兩個問題,但都出現了同樣的錯誤,但是沒有一個被回答為正常工作,似乎無法正常工作。 我正在連接到Google應用內結算並設置了所有內容,但是,當我嘗試拉出我的草圖時(我現在那里有2個SKU),我收到了錯誤- 預期為BEGIN_OBJECT,但在第1行第2列路徑為BEGIN_ARRAY
我有一個SubscriptionActivity,Result(可序列化)和Details模型類(可序列化)。 下面是代碼,任何幫助都將非常有用,謝謝-
來自訂閱活動:
Gson gson = new Gson();
try {
Result result = gson.fromJson(skuDetailsList.toString(), Result.class);
if (result != null) {
for (Details d : result.getDetails()) {
System.out.println(d.getProductId()
+ " \n " + d.getTitle() + " \n " + d.getDescription() + " \n "
+ d.getPrice());
}
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
從細節模型:
public class Details implements Serializable{
@SerializedName("productId")
@Expose
private String productId;
@SerializedName("type")
@Expose
private String type;
@SerializedName("price")
@Expose
private String price;
@SerializedName("price_amount_micros")
@Expose
private Integer priceAmountMicros;
@SerializedName("price_currency_code")
@Expose
private String priceCurrencyCode;
@SerializedName("subscriptionPeriod")
@Expose
private String subscriptionPeriod;
@SerializedName("freeTrialPeriod")
@Expose
private String freeTrialPeriod;
@SerializedName("title")
@Expose
private String title;
@SerializedName("description")
@Expose
private String description;
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public Integer getPriceAmountMicros() {
return priceAmountMicros;
}
public void setPriceAmountMicros(Integer priceAmountMicros) {
this.priceAmountMicros = priceAmountMicros;
}
public String getPriceCurrencyCode() {
return priceCurrencyCode;
}
public void setPriceCurrencyCode(String priceCurrencyCode) {
this.priceCurrencyCode = priceCurrencyCode;
}
public String getSubscriptionPeriod() {
return subscriptionPeriod;
}
public void setSubscriptionPeriod(String subscriptionPeriod) {
this.subscriptionPeriod = subscriptionPeriod;
}
public String getFreeTrialPeriod() {
return freeTrialPeriod;
}
public void setFreeTrialPeriod(String freeTrialPeriod) {
this.freeTrialPeriod = freeTrialPeriod;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
來自結果活動:
public class Result implements Serializable{
@SerializedName("SkuDetails")
@Expose
private ArrayList<Details> details = new ArrayList<Details>();
/**
*
* @return The SkuDetails
*/
public ArrayList<Details> getDetails() {
return details;
}
/**
*
* @param details
* The details
*/
public void setDetails(ArrayList<Details> details) {
this.details = details;
}
}*
哦..我試圖解析的響應(skuDetailsList.toString())是:
[
SkuDetails: {
"productId": "basic_sub",
"type": "subs",
"price": "$0.99",
"price_amount_micros": 990000,
"price_currency_code": "USD",
"subscriptionPeriod": "P1M",
"freeTrialPeriod": "P4W2D",
"title": "Basic Subscription Service (DadBod Recipes)",
"description": "Basic Subscription Service for DadBodRecipes"
},
SkuDetails: {
"productId": "enterprise_sub",
"type": "subs",
"price": "$2.99",
"price_amount_micros": 2990000,
"price_currency_code": "USD",
"subscriptionPeriod": "P1M",
"freeTrialPeriod": "P4W2D",
"title": "Enterprise Subscription Service (DadBod Recipes)",
"description": "Enterprise Subscription Service for DadBodRecipes"
}
]
問題是因為您得到的結果是< 鍵值 >對(不是JSON對象/數組,而是類似的) 。
因此,您需要先將其設為JSONObject
,然后使用Gson
對其進行解析,如下所示:
Map<String, String> params = skuDetailsList;
JSONObject object = new JSONObject(params);
Result result = gson.fromJson(object.toString(), Result.class);
這樣做,希望對您有所幫助!
您正在嘗試解析json
[
如
{
當您看到[它代表一個列表
當您看到{時,它代表一個對象。
我很確定您在構建包裝器類時就知道,但是包裝器類也是一個對象,而不是數組。
因此,您的選擇是讓包裝器類擴展ArrayList或某種形式的List。
要么
告訴您的Json轉換器基數是一個數組,並且您希望列表中的第一個對象是您類型的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.