如何将LinkedTreeMap数据转为String并处理天气API嵌套数据?
解决Gson LinkedTreeMap转String及天气API数据处理问题
问题原因
restResult.get("response")返回的是Gson解析JSON对象生成的LinkedTreeMap实例,而非String类型,直接强转必然抛出ClassCastException。
方法一:将LinkedTreeMap转为JSON字符串
利用Gson的序列化能力,把LinkedTreeMap直接转为标准JSON字符串:
import com.google.gson.Gson; // 初始化Gson实例 Gson gson = new Gson(); // 获取response对应的Map对象 Object responseObj = restResult.get("response"); // 序列化为JSON字符串 String responseJsonStr = gson.toJson(responseObj);
拿到字符串后,可根据需求进行后续的字符串处理或再次解析。
方法二:直接遍历Map处理数据(更高效)
既然数据已经是Map结构,无需转字符串,直接逐层提取数据更高效:
// 提取response层级的Map Map<String, Object> responseMap = (Map<String, Object>) restResult.get("response"); // 处理header信息 Map<String, Object> headerMap = (Map<String, Object>) responseMap.get("header"); String resultCode = (String) headerMap.get("resultCode"); String resultMsg = (String) headerMap.get("resultMsg"); // 处理body信息 Map<String, Object> bodyMap = (Map<String, Object>) responseMap.get("body"); String dataType = (String) bodyMap.get("dataType"); // 提取预报数据列表 Map<String, Object> itemsMap = (Map<String, Object>) bodyMap.get("items"); List<Map<String, Object>> forecastList = (List<Map<String, Object>>) itemsMap.get("item"); // 遍历处理每条预报数据 for (Map<String, Object> forecast : forecastList) { String baseDate = (String) forecast.get("baseDate"); String baseTime = (String) forecast.get("baseTime"); String category = (String) forecast.get("category"); String fcstDate = (String) forecast.get("fcstDate"); String fcstTime = (String) forecast.get("fcstTime"); Object fcstValue = forecast.get("fcstValue"); // 兼容字符串(如"강수없음")和数值类型 Double nx = (Double) forecast.get("nx"); Double ny = (Double) forecast.get("ny"); // 自定义处理逻辑示例 System.out.printf("类别: %s | 预报时间: %s %s | 预报值: %s%n", category, fcstDate, fcstTime, fcstValue); }
注意事项
- 类型转换时需注意字段的实际类型:比如
fcstValue可能是字符串(无降水情况)或数值,建议用Object接收后再根据业务场景转换。 - 确保项目中已正确引入Gson依赖,避免类找不到的问题。
内容的提问来源于stack exchange,提问作者Chris Song
相关产品推荐
相关产品推荐

