簡體   English   中英

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:預期為BEGIN_OBJECT,但在第1行第2列路徑處為BEGIN_ARRAY

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM