【问题标题】:How to get JSON field using GSON and @SerializedName ?如何使用 GSON 和 @SerializedName 获取 JSON 字段?
【发布时间】:2018-07-07 10:17:01
【问题描述】:

我在解析以下 JSON 对象时遇到问题

                    "paymentCurrency": "eur",
                    "paymentOptions": [
                        {
                            "paymentOptionId": "1CeGuJt2nkxmaMVf",
                            "paymentProfileUpdateNeeded": false,
                            "status": "DISABLED",
                            "supportedCardTypes": [
                                "CARD_TYPE_1",
                                "CARD_TYPE_2",
                                "CARD_TYPE_3"
                            ],
                            "type": "TYPE_1"
                        },
                        {
                            "paymentOptionId": "J8iAFXRZZC07rJdG",
                            "status": "DISABLED",
                            "type": "TYPE_2"
                        }
                    ],
                    "tripCost": "3000",

这是我到目前为止所尝试的。除了 @SerializedName 和 GSON 之外,我不能使用任何东西来解析数组。请在下面找到模型类:

public class MatchDetails {
//other fields
   @SerializedName("paymentOptions")
   public ArrayList<PaymentOptionWrapper> options;
}

public class PaymentOptionWrapper {
    public PaymentOption option;
}


public class PaymentOption {

   @SerializedName("paymentOptionId")
   public String paymentOptionId;

   @SerializedName("paymentProfileUpdateNeeded")
   public boolean profileUpdateNeeded;

   @SerializedName("status")
   public String status;

   @SerializedName("supportedCardTypes")
   public ArrayList<String> supportedCards;

   @SerializedName("type")
   public String type;
}

我也试过不使用包装器,直接映射列表但它仍然为空。

【问题讨论】:

  • 使用这个jsonschema2pojo.org它可以帮助你
  • 用这个工具试过了,生成的代码不起作用。

标签: android arrays json gson


【解决方案1】:

试试这个...

public class MatchDetails {
    //other fields
    @SerializedName("paymentOptions")
    public ArrayList<PaymentOption> options;

    public ArrayList<PaymentOption> getOptions() {
        return options;
    }

    public void setOptions(ArrayList<PaymentOption> options) {
        this.options = options;
    }
}


 class PaymentOption {

    @SerializedName("paymentOptionId")
    public String paymentOptionId;

    @SerializedName("paymentProfileUpdateNeeded")
    public boolean profileUpdateNeeded;

    @SerializedName("status")
    public String status;

    @SerializedName("supportedCardTypes")
    public ArrayList<String> supportedCards;

    @SerializedName("type")
    public String type;

     public String getPaymentOptionId() {
         return paymentOptionId;
     }

     public void setPaymentOptionId(String paymentOptionId) {
         this.paymentOptionId = paymentOptionId;
     }

     public boolean isProfileUpdateNeeded() {
         return profileUpdateNeeded;
     }

     public void setProfileUpdateNeeded(boolean profileUpdateNeeded) {
         this.profileUpdateNeeded = profileUpdateNeeded;
     }

     public String getStatus() {
         return status;
     }

     public void setStatus(String status) {
         this.status = status;
     }

     public ArrayList<String> getSupportedCards() {
         return supportedCards;
     }

     public void setSupportedCards(ArrayList<String> supportedCards) {
         this.supportedCards = supportedCards;
     }

     public String getType() {
         return type;
     }

     public void setType(String type) {
         this.type = type;
     }
 }

【讨论】:

  • 您要访问 JSON 文件末尾提到的 paymentOptionId、Status 和 type 吗?
  • 是的。我需要这些信息,JSON 文件就像一个配置文件,我需要这些信息来启动流程。
  • 没有太多要发的。我正在使用将 GsonConverterFactory 附加到 Retrofit 的默认方式。我没有使用任何自定义解析代码。
【解决方案2】:

试试这个:

public class MatchDetails implements Serializable
{
    @SerializedName("paymentOptions")
    @Expose
    private List<PaymentOption> paymentOptions = null;

    private final static long serialVersionUID = 7730239716376724487L;

    public List<PaymentOption> getPaymentOptions() {
        return paymentOptions;
    }

    public void setPaymentOptions(List<PaymentOption> paymentOptions) {
        this.paymentOptions = paymentOptions;
    }
}

public class PaymentOption implements Serializable
{
    @SerializedName("paymentOptionId")
    @Expose
    private String paymentOptionId;

    @SerializedName("paymentProfileUpdateNeeded")
    @Expose
    private Boolean paymentProfileUpdateNeeded;

    @SerializedName("status")
    @Expose
    private String status;

    @SerializedName("supportedCardTypes")
    @Expose
    private List<String> supportedCardTypes = null;

    @SerializedName("type")
    @Expose
    private String type;

    private final static long serialVersionUID = -5717104877176081166L;

    public String getPaymentOptionId() {
        return paymentOptionId;
    }

    public void setPaymentOptionId(String paymentOptionId) {
        this.paymentOptionId = paymentOptionId;
    }

    public Boolean getPaymentProfileUpdateNeeded() {
        return paymentProfileUpdateNeeded;
    }

    public void setPaymentProfileUpdateNeeded(Boolean paymentProfileUpdateNeeded) {
        this.paymentProfileUpdateNeeded = paymentProfileUpdateNeeded;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public List<String> getSupportedCardTypes() {
        return supportedCardTypes;
    }

    public void setSupportedCardTypes(List<String> supportedCardTypes) {
        this.supportedCardTypes = supportedCardTypes;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2018-02-25
    • 1970-01-01
    • 2019-02-12
    • 2011-08-13
    相关资源
    最近更新 更多