我希望将我在Netbeans Java项目中使用的天气API中的天气转换为我自己的Maven API,这一切都很好,但是当我想将其分解为较小的可读性时,返回一个巨大的JSON响应文字。
我的代码当前正在返回:
{“ coord”:{“ lon”:-6.26,“ lat”:53.35},“ 天气”:[{“ id”:801,“ 主要“:”云“,”描述“:”很少 clouds“,” icon“:” 02d“}],” base“:” stations“,” 主要“:{” 温度“:285.59,”压力“: 1015,“湿度”:58,“温度最小值”:285.15,“温度最大值”:286.15},“可见度”:10000,“风”:{“速度”:3.6,“度”:80},“云”:{ “ all”:20},“ dt”:1539610200,“ sys”:{“ type”:1,“ id”:5237,“ message”:0.0027,“ country”:“ IE”,“ sunrise”:1539586357, “ sunset”:1539624469},“ id”:2964574,“ name”:“ Dublin”,“ cod”:200}
我希望它能够返回,主要在天气和温度方面也是如此。如果有人有任何想法请告诉我。附带代码。
public class WeatherInfo {
public static String getWeather(String city) {
String weather;
String getUrl = "http://api.openweathermap.org/data/2.5/weather?q="+ city +"&appid=xxx";
Client client = Client.create();
WebResource target = client.resource(getUrl);
ClientResponse response = target.get(ClientResponse.class);
weather = response.getEntity(String.class);
return weather;
}
}
答案 0 :(得分:1)
我假设您希望从getWeather
返回的值为{"main":"Clouds","temp":285.59}
这是一个解决方案-
在pom中添加jackson依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.7</version>
</dependency>
这是一种去除其他细节并仅返回main和temp的方法,您可以编辑此方法以添加更多字段。
private static String getLessWeather(String weatherJson) throws IOException {
Map<String, Object> lessWeatherMap = new LinkedHashMap<String, Object>();
Map<String,Object> weatherMap = new ObjectMapper().readValue(weatherJson, LinkedHashMap.class);
String main = (String) ((LinkedHashMap)((ArrayList)weatherMap.get("weather")).get(0)).get("main");
lessWeatherMap.put("main", main);
Double temp = (Double)((LinkedHashMap)weatherMap.get("main")).get("temp");
lessWeatherMap.put("temp", temp);
return new ObjectMapper().writeValueAsString(lessWeatherMap);
}
答案 1 :(得分:0)
您需要使用一个库来解析JSON响应。这是一个带有出色示例和参考的SO问题:How to parse JSON in Java
用户SDekov的回答列出了三个不错的选择: