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

使用Gson反序列化含随机键JSON时循环异常,结果不符合预期

解决Gson自定义反序列化嵌套Map时的重复数据问题

我一看你的问题就知道哪里出问题了——你肯定是把result2这个内层Map的初始化放在了外层循环的外面对吧?

你看你现在的循环逻辑:每次遍历外层的jsonObject条目时,直接往同一个result2里塞内层的键值对,然后把这个result2赋值给result[key]。但Map是引用类型啊,这就意味着所有外层的key指向的都是同一个result2对象。当你处理第二个外层key(也就是random2)的时候,往result2里加了新的内容,之前的random1对应的Map也会跟着变,因为它们指向的是同一个内存地址,这就导致random1的Map里莫名其妙多了random2的内容。

修复方案很简单:每次外层循环都新建一个内层Map

把result2的初始化移到外层循环里面,这样每个外层key都会对应一个全新的内层Map,互相不会干扰。

修改后的代码如下:

// 初始化外层Map
Map<String, Map<String, Any>> result = new HashMap<>();

for ((key, element) in jsonObject.entrySet()) { 
    // 关键:每次外层循环都新建一个内层Map
    Map<String, Any> result2 = new HashMap<>();
    for ((key2, element2) in element.asJsonObject.entrySet()) { 
        result2[key2] = element2 
    }
    result[key] = result2 
}

这样处理之后,random1对应的内层Map只会包含它自己的randomKey1和randomKey2,random2对应的内层Map也只有它自己的randomKey1,完全符合你的期望输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:49:15