JsonObject操作时getInt/getString失效仅识别getAsInt/getAsString且成员名不识别
问题解决方案
问题1:getInt、getString方法无法调用,仅能识别getAsInt、getAsString
- 原因:你当前使用的是
com.google.gson.JsonObject(Gson库的JsonObject实现),该类本身未提供getInt()、getString()这类直接按类型取值的API,你记忆中的这类API属于org.json库的JSONObject类,二者是不同JSON解析库的实现,API不通用。 - 解决方案:
- 若继续使用Gson库,统一使用
getAsInt()、getAsString()这类API即可,标准用法为:jsonObject.get("字段名").getAsInt()/jsonObject.get("字段名").getAsString() - 若需要使用
getInt()、getString()API,切换依赖到org.json库,将所有导入的JsonObject包路径替换为org.json.JSONObject即可。
- 若继续使用Gson库,统一使用
问题2:weather_state_name成员无法识别的问题
你给出的代码存在API调用错误,getAsString()是JsonElement的无参方法,不属于JsonObject的带参方法,需要先通过get("字段名")拿到对应的JsonElement实例后再调用类型转换方法。
修正后的代码如下:
JsonObject first_day_from_api = (JsonObject) consolodated_weather_list.get(0); // 先获取对应字段的JsonElement实例,再调用getAsString完成类型转换 first_day.setWeather_state_name(first_day_from_api.get("weather_state_name").getAsString());
如果修正后仍提示找不到该字段,按以下顺序排查:
- 检查接口返回的JSON结构中,consolidated_weather数组的元素下是否真的存在
weather_state_name字段,注意拼写、大小写、下划线是否完全匹配 - 排查接口返回是否存在数据异常,比如该字段为null或者对应节点不是字符串类型,这种情况可以增加非空判断避免空指针:
JsonElement weatherStateEle = first_day_from_api.get("weather_state_name"); if (weatherStateEle != null && !weatherStateEle.isJsonNull()) { first_day.setWeather_state_name(weatherStateEle.getAsString()); } else { // 可自行设置默认值或者做异常处理 first_day.setWeather_state_name(""); }
内容的提问来源于stack exchange,提问作者Usman Raoof
相关产品推荐
相关产品推荐

