You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

REST API响应JSON映射Java类时Gson解析异常求助

解决方案:修复动态键JSON到Java类的Gson映射问题

你遇到的异常核心原因是:JSON中transactions是带动态键的嵌套对象,但Java类里将其定义为String类型,类型完全不匹配;同时Embedded类的字段类型和JSON中的布尔值不匹配,也会导致后续解析异常。以下是具体修复步骤:

1. 修正Java类定义

修改Transaction类

将transactions字段类型改为Map<String, Embedded>,用Map来承接动态键的嵌套结构:

public class Transaction {
    // 用Map接收动态键的交易对象集合
    public Map<String, Embedded> transactions;
    public Embedded embedded;

    // Getter & Setter
    public Map<String, Embedded> getTransactions() {
        return transactions;
    }

    public void setTransactions(Map<String, Embedded> transactions) {
        this.transactions = transactions;
    }

    public Embedded getEmbedded() {
        return embedded;
    }

    public void setEmbedded(Embedded embedded) {
        this.embedded = embedded;
    }
}

修改Embedded类

JSON中的complete、confirmed、expiration_mark是布尔类型,将对应字段从String改为boolean:

class Embedded {
    public boolean complete;
    public boolean confirmed;
    public String event_transaction_id;
    public String event_type;
    public boolean expiration_mark;

    // 可选:添加Getter & Setter
    public boolean isComplete() {
        return complete;
    }

    public void setComplete(boolean complete) {
        this.complete = complete;
    }

    public boolean isConfirmed() {
        return confirmed;
    }

    public void setConfirmed(boolean confirmed) {
        this.confirmed = confirmed;
    }

    public String getEvent_transaction_id() {
        return event_transaction_id;
    }

    public void setEvent_transaction_id(String event_transaction_id) {
        this.event_transaction_id = event_transaction_id;
    }

    public String getEvent_type() {
        return event_type;
    }

    public void setEvent_type(String event_type) {
        this.event_type = event_type;
    }

    public boolean isExpiration_mark() {
        return expiration_mark;
    }

    public void setExpiration_mark(boolean expiration_mark) {
        this.expiration_mark = expiration_mark;
    }
}

2. 解析代码无需改动

原有的解析逻辑可以直接使用,Gson会自动将动态键的JSON对象映射到Map中:

try {
    Transaction trans = new Gson().fromJson(transstring, Transaction.class);
    // 示例:遍历所有交易
    for (Map.Entry<String, Embedded> entry : trans.getTransactions().entrySet()) {
        String transactionId = entry.getKey();
        Embedded detail = entry.getValue();
        System.out.println("交易ID:" + transactionId);
        System.out.println("是否完成:" + detail.isComplete());
    }
} catch (Exception e) {
    System.out.println(e.getMessage());
}

关键说明

  • Map<String, Embedded>完美适配JSON中transactions的动态键结构,每个动态交易ID作为Map的key,对应的交易详情作为value。
  • 修正Embedded字段类型后,布尔值能被正确解析,避免类型转换异常。

内容的提问来源于stack exchange,提问作者crokett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 19:15:13