使用Gson fromJson解析后返回null,请问问题出在哪里?
问题原因
你的JSON结构与数据类Countries不匹配:
- 你的JSON字符串的根对象就是一个
Map<String, List<String>>(直接是国家到城市列表的键值对) - 但数据类
Countries定义了一个名为countries的字段,Gson会尝试在JSON中寻找顶级键"countries"来匹配这个字段,而你的JSON里根本没有这个键,因此解析后countries字段只能是null。
解决方案
有两种可行的解决方式,根据你的需求选择:
方式1:直接解析为Map类型(推荐,无需额外嵌套)
去掉外层的Countries数据类,直接将JSON解析成目标Map类型:
val countriesMap: Map<String, List<String>> = Gson().fromJson( jsonString, object : TypeToken<Map<String, List<String>>>() {}.type ) println(countriesMap)
这样就能直接得到国家与城市列表的映射关系,输出结果符合预期。
方式2:让JSON结构与数据类匹配
如果必须保留Countries数据类,需要调整JSON结构,给整个内容套上"countries"顶级键:
{ "countries": { "Afghanistan": [ "Herat", "Kabul", "Kandahar", "Molah", "Rana", "Shar", "Sharif", "Wazir Akbar Khan" ], "Albania": [ "Elbasan", "Petran", "Pogradec", "Shkoder", "Tirana", "Ura Vajgurore" ] } }
修改后,原有的解析代码就能正常工作,Gson会找到"countries"键并将对应的值赋值给数据类的countries字段。
内容的提问来源于stack exchange,提问作者Ryder Williams
相关产品推荐
相关产品推荐

