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

如何用GSON反序列化包含动态键的JSON数据?

如何反序列化result字段键值动态变化的JSON?

我收到一段JSON响应,其中result字段的键是动态的,有时仅包含3个条目,有时是5个或更多。键与值的名称、数量均不固定,原本以为只需使用List即可,请问该如何编写类来正确反序列化这段JSON?

最初的代码实现

主类

public static void main(String[] args) {

    String response = "{\n" +
            "    \"error\": [],\n" +
            "    \"result\": {\n" +
            "        \"value11\": \"0.0233260\",\n" +
            "        \"value22\": \"59.2500\",\n" +
            "        \"value33\": \"0.0233260300\",\n" +
            "        \"value44\": \"0.00000000\"\n" +
            "    }\n" +
            "}";

    Gson gson = new Gson();
    var responseBalance= gson.fromJson(response, ResponseIds.class);
    System.out.println("Print " + responseBalance.getResult().getData());
}

ResponseIds类

public class ResponseIds {

 @SerializedName("result")
 private Result result;

 @SerializedName("error")
 private List<Object> error;

 public Result getResult(){
     return result;
 }

 public List<Object> getError(){
     return error;
 }
}

Result类

public class Result{

private  HashMap<String, String> data;;

public HashMap<String, String> getData() {
    return data;
}

public void setData(HashMap<String, String> data) {
    this.data = data;
}
}

简洁解决方案(编辑补充)

直接将result字段定义为Map类型,无需额外的Result类:

public class ResponseIds {

@SerializedName("result")
private Map<String, String> result;

@SerializedName("error")
private List<Object> error;

public Map<String, String> getResult() {
    return result;
}

}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:56:02