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
相关产品推荐
相关产品推荐

