- 浏览: 1757049 次
- 性别:
- 来自: 大连
博客专栏
-
Spring数据库访问系列...
浏览量:173675
-
Android学习笔记
浏览量:368147
-
iBatis开发详解
浏览量:189276
-
Objective-C学习...
浏览量:99851
最新评论
-
iLidy:
引用[/c
Hibernate持久化对象的生命周期详解 -
fengzigogo:
您好,有这个项目架构的源码下载地址吗?
一种Java Web应用开发框架的构建(基于Struts2+Spring+FreeMarker)之一 -
spring_springmvc:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
用Maven构建Java Web开发环境(Jetty容器)之二 -
springdata_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring 3之MVC & Security简单整合开发(二) -
赵庆辉:
看帖回复是美德,楼主讲的很清晰明了,看了豁然开朗.
Java String对象的经典问题(new String())
在上一篇中,我们使用了XStream来解析XML(HttpClient 4发送请求)制作了一个电子商务小应用,本篇我们来解析另外一种使用广泛的数据交换技术JSON。
本文意在说明JACKSON组件解析JSON格式文本,并结合中央气象台的天气预报API来展示。天气预报的请求地址是:http://m.weather.com.cn/data/101070201.html,这个文本就是城市代码,101070201代表大连市,执行URL,得到一个返回文本,是JSON格式的,如下:
字段言简意赅,城市名,英文名,日期,农历日期,星期,预报时间,城市代码,6个预报温度(华氏温度,摄氏温度),6个预报天气和风力,剩下的就是一些气象指数什么的了,本例我们仅仅拿当日的信息来说明。
这段文本是我们直接通过浏览器请求来的,但是在程序中如何进行?需要借助网络api的帮助,可以直接使用java网络api,也可以使用第三方类库,这里我们使用Apache的Commons组件中的HttpClient3来说明。首先建立项目工程,使用Maven管理:
引入的必要的依赖,如下:
Weather类是封装必要数据的Bean,很简单,如下:
下面就是示例代码了,很简单:
其中提供了获取JSON和处理JSON结果的方法,用法都很简单,这样就可以得到天气预报的结果了:
Jackson处理JSON非常简单,但要了解JSON文本的格式,这样就可以遍历了。到这里我们已经可以通过HttpClient和Jackson组件获取到了我们需要的信息,可以在应用中提供天气预报服务了,但是我们最开始使用的是一个城市代码,比如代表大连的101070201,这个数字是网站自己定义的,而没有其它任何实际含义(比如电话区号,行政代码等),那么要么我们在网站直接获得该城市的代码,否则就无法得到城市代码而去查询API了。其实网站也为我们获取城市代码提供了查询方法,如下:
访问http://m.weather.com.cn/data5/city.xml?level=0,(后面level参数可省略)得到一级列表(省、直辖市、自治区),结果用逗号隔开,id和城市名称使用竖线“|”隔开;结果示例如下:
之后我们继续访问http://m.weather.com.cn/data5/city02.xml?level=1,(后面level参数可省略)得到二级列表。其中02是一级省市的id,结果格式和上一层相同,示例如下(河南):
继续访问http://m.weather.com.cn/data5/city1809.xml?level=3,(后面level参数可省略)得到后一级的id,是区域的id,示例如下(洛阳市):
继续访问http://m.weather.com.cn/data5/city180908.xml,获得偃师市的代码:180908|101180908,那么通过101180908就可以获得偃师市的天气预报。
知道这个规则后就可以在页面使用ajax方式请求地址获取到城市代码然后执行拿到天气预报,而在程序中,我们就需要一级一级的请求来获取代码了。
下面就展示一下这个根据字符串地址获取天气的程序:
程序中对城市名称做了一点限制,直辖市等级为省,没有城市名,有城市名可以不用输入到区县,又如:
这都是可以的,程序中对城市名称的处理可能不很准确,真实环境中这省市区这三个字段应该分别提供,截字符串可能会有偏差,本程序测试了大多数情况,是可行的。
本文系作者的实践探索,欢迎交流,希望对使用者有用。
这都是网站直接定义好的,可以直接使用
这个只能参考官网页面里的信息和json的信息比对来确定了。
这个官网的json说明在哪呢?》
官网没有对json的说明,只能比对字段信息然后确定含义。
这个只能参考官网页面里的信息和json的信息比对来确定了。
这个官网的json说明在哪呢?》
这里就是之前要处理的地方了,JAR包请参考Maven的设置。
这个只能参考官网页面里的信息和json的信息比对来确定了。
有可以参考的示例吗?
上一篇用的是第4版,这样就都兼顾到了。
好吧,我没有仔细看你的博客内容。呵呵,我的博客才开张,里面也有一个HttpClient3.1写的实例,可以交流一下哦。我和我的公主大人共同维护者。
上一篇用的是第4版,这样就都兼顾到了。
本文意在说明JACKSON组件解析JSON格式文本,并结合中央气象台的天气预报API来展示。天气预报的请求地址是:http://m.weather.com.cn/data/101070201.html,这个文本就是城市代码,101070201代表大连市,执行URL,得到一个返回文本,是JSON格式的,如下:
{"weatherinfo":{"city":"大连","city_en":"dalian","date_y":"2010年11月21日","date":"庚寅年十月十六","week":"星期日","fchh":"18","cityid":"101070201","temp1":"0℃~6℃","temp2":"1℃~9℃","temp3":"4℃~7℃","temp4":"-1℃~6℃","temp5":"-1℃~7℃","temp6":"-2℃~3℃","tempF1":"32℉~42.8℉","tempF2":"33.8℉~48.2℉","tempF3":"39.2℉~44.6℉","tempF4":"30.2℉~42.8℉","tempF5":"30.2℉~44.6℉","tempF6":"28.4℉~37.4℉","weather1":"多云转晴","weather2":"晴","weather3":"多云","weather4":"晴","weather5":"晴转多云","weather6":"多云转晴","img1":"1","img2":"0","img3":"0","img4":"99","img5":"1","img6":"99","img7":"0","img8":"99","img9":"0","img10":"1","img11":"1","img12":"0","img_single":"0","img_title1":"多云","img_title2":"晴","img_title3":"晴","img_title4":"晴","img_title5":"多云","img_title6":"多云","img_title7":"晴","img_title8":"晴","img_title9":"晴","img_title10":"多云","img_title11":"多云","img_title12":"晴","img_title_single":"晴","wind1":"西北风5-6级转北风4-5级","wind2":"北风转南风4-5级","wind3":"南风4-5级转北风5-6级","wind4":"北风5-6级转4-5级","wind5":"北风转南风4-5级","wind6":"南风转北风4-5级","fx1":"西北风","fx2":"北风","fl1":"5-6级转4-5级","fl2":"4-5级","fl3":"4-5级转5-6级","fl4":"5-6级转4-5级","fl5":"4-5级","fl6":"4-5级","index":"凉","index_d":"天气凉,建议着厚外套加毛衣等春秋服装。年老体弱者宜着大衣、呢外套加羊毛衫。","index48":"凉","index48_d":"天气凉,建议着厚外套加毛衣等春秋服装。年老体弱者宜着大衣、呢外套加羊毛衫。","index_uv":"中等","index48_uv":"弱","index_xc":"较适宜","index_tr":"一般","index_co":"较不舒适","st1":"2","st2":"-4","st3":"7","st4":"1","st5":"5","st6":"1","index_cl":"较不宜","index_ls":"基本适宜"}}
字段言简意赅,城市名,英文名,日期,农历日期,星期,预报时间,城市代码,6个预报温度(华氏温度,摄氏温度),6个预报天气和风力,剩下的就是一些气象指数什么的了,本例我们仅仅拿当日的信息来说明。
这段文本是我们直接通过浏览器请求来的,但是在程序中如何进行?需要借助网络api的帮助,可以直接使用java网络api,也可以使用第三方类库,这里我们使用Apache的Commons组件中的HttpClient3来说明。首先建立项目工程,使用Maven管理:
引入的必要的依赖,如下:
Weather类是封装必要数据的Bean,很简单,如下:
package weather; public class Weather { private String city;// 城市名 private String date;// 日期:yyyy年MM月d日 private String lunarDate;// 农历日期/当日有 private String week;// 星期 private String fcTime;// 预报时间:24制小时数/当日有 private String temperature;// 当日气温 private String weather;// 天气 private String wind;// 风力 // 省略了getter和setter方法 @Override public String toString() { return "Weather [city=" + city + ", date=" + date + ", fcTime=" + fcTime + ", lunarDate=" + lunarDate + ", temperature=" + temperature + ", weather=" + weather + ", week=" + week + ", wind=" + wind + "]"; } }
下面就是示例代码了,很简单:
package weather; import java.util.HashMap; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonParser; import org.codehaus.jackson.JsonToken; import org.codehaus.jackson.map.MappingJsonFactory; /** * 天气预报服务,解析JSON * * @author Nanlei * */ public class Demo { private static String URL = "http://m.weather.com.cn/data/101070201.html";// 请求的地址 private static HttpClient client; private static GetMethod getMethod; /** * 静态块初始化所需对象 */ static { client = new HttpClient(); getMethod = new GetMethod(URL); } /** * 获取获得的Json结果 * * @return */ public static String getJsonText() { String jsonText = null; try { int status = client.executeMethod(getMethod); if (status == HttpStatus.SC_OK) {// HTTP 200 OK jsonText = getMethod.getResponseBodyAsString();// 获取字符串形式的结果,建议使用流式结果 } } catch (Exception e) { System.err.println(e); } return jsonText; } /** * 处理Json结果并封装Bean * * @param jsonText * @return */ public static Weather getWeatherBean(String jsonText) { // Weather对象 Weather weather = new Weather(); try { JsonFactory jsonFactory = new MappingJsonFactory(); // Json解析器 JsonParser jsonParser = jsonFactory.createJsonParser(jsonText); // 跳到结果集的开始 jsonParser.nextToken(); // 接受结果的HashMap HashMap<String, String> map = new HashMap<String, String>(); // while循环遍历Json结果 while (jsonParser.nextToken() != JsonToken.END_OBJECT) { // 跳转到Value jsonParser.nextToken(); // 将Json中的值装入Map中 map.put(jsonParser.getCurrentName(), jsonParser.getText()); } // 将数据封装 weather.setCity(map.get("city")); weather.setDate(map.get("date_y")); weather.setLunarDate(map.get("date")); weather.setWeek(map.get("week")); weather.setFcTime(map.get("fchh")); weather.setTemperature(map.get("temp1")); weather.setWeather(map.get("weather1")); weather.setWind(map.get("wind1")); } catch (Exception e) { System.err.println(e); } return weather; } /** * 主函数 * * @param args */ public static void main(String[] args) { System.out.println(getWeatherBean(getJsonText())); } }
其中提供了获取JSON和处理JSON结果的方法,用法都很简单,这样就可以得到天气预报的结果了:
Weather [city=大连, date=2010年11月21日, fcTime=18, lunarDate=庚寅年十月十六, temperature=0℃~6℃, weather=多云转晴, week=星期日, wind=西北风5-6级转北风4-5级]
Jackson处理JSON非常简单,但要了解JSON文本的格式,这样就可以遍历了。到这里我们已经可以通过HttpClient和Jackson组件获取到了我们需要的信息,可以在应用中提供天气预报服务了,但是我们最开始使用的是一个城市代码,比如代表大连的101070201,这个数字是网站自己定义的,而没有其它任何实际含义(比如电话区号,行政代码等),那么要么我们在网站直接获得该城市的代码,否则就无法得到城市代码而去查询API了。其实网站也为我们获取城市代码提供了查询方法,如下:
访问http://m.weather.com.cn/data5/city.xml?level=0,(后面level参数可省略)得到一级列表(省、直辖市、自治区),结果用逗号隔开,id和城市名称使用竖线“|”隔开;结果示例如下:
01|北京,02|上海,03|天津,04|重庆,05|黑龙江,06|吉林,07|辽宁,08|内蒙古,09|河北,10|山西,11|陕西,12|山东,13|新疆,14|西藏,15|青海,16|甘肃,17|宁夏…
之后我们继续访问http://m.weather.com.cn/data5/city02.xml?level=1,(后面level参数可省略)得到二级列表。其中02是一级省市的id,结果格式和上一层相同,示例如下(河南):
1801|郑州,1802|安阳,1803|新乡,1804|许昌,1805|平顶山,1806|信阳,1807|南阳,1808|开封,1809|洛阳,1810|商丘,1811|焦作,1812|鹤壁,1813|濮阳,1814|周口,1815|漯河,1816|驻马店,1817|三门峡,1818|济源
继续访问http://m.weather.com.cn/data5/city1809.xml?level=3,(后面level参数可省略)得到后一级的id,是区域的id,示例如下(洛阳市):
180901|洛阳,180902|新安,180903|孟津,180904|宜阳,180905|洛宁,180906|伊川,180907|嵩县,180908|偃师,180909|栾川,180910|汝阳
继续访问http://m.weather.com.cn/data5/city180908.xml,获得偃师市的代码:180908|101180908,那么通过101180908就可以获得偃师市的天气预报。
知道这个规则后就可以在页面使用ajax方式请求地址获取到城市代码然后执行拿到天气预报,而在程序中,我们就需要一级一级的请求来获取代码了。
下面就展示一下这个根据字符串地址获取天气的程序:
package weather; import java.io.InputStream; import java.util.HashMap; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.lang.StringUtils; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonParser; import org.codehaus.jackson.JsonToken; import org.codehaus.jackson.map.MappingJsonFactory; public class Demo2 { public static void main(String[] args) throws Exception { String name = "河南洛阳偃师"; StringBuffer cityCode = new StringBuffer(); String provinceName = null;// 省份名称 String cityName = null;// 城市名称 String districtName = null;// 区县名称 if (name.length() >= 6) { provinceName = name.substring(0, 2); cityName = name.substring(2); districtName = name.substring(4); } else if (name.length() == 5) { provinceName = name.substring(0, 2); cityName = name.substring(2); districtName = ""; } else if (name.length() <= 4) { provinceName = name.substring(0, 2); cityName = ""; districtName = name.substring(2); } else { System.out.println("城市名称错误"); System.exit(0); } // 下面开始根据这三个名称来获取weather.com.cn的城市代码 HttpClient client = new HttpClient(); GetMethod get = new GetMethod("http://m.weather.com.cn/data5/city.xml");// 获取省份 String provinceStr = null; if (client.executeMethod(get) == HttpStatus.SC_OK) { provinceStr = get.getResponseBodyAsString(); } String[] provinceArray = provinceStr.split(","); String provinceCode = null; for (int i = 0; i < provinceArray.length; i++) {// 遍历省份 if (provinceArray[i].substring(3).indexOf(provinceName) != -1) { provinceCode = provinceArray[i].substring(0, 2); cityCode.append(provinceCode);// 获得省份编码 } } // 城市代码 if (Integer.parseInt(provinceCode) <= 4 || Integer.parseInt(provinceCode) >= 32) {// 直辖市和港澳台 get = new GetMethod("http://m.weather.com.cn/data5/city" + provinceCode + "01.xml"); if (client.executeMethod(get) == HttpStatus.SC_OK) { String[] districtArray = get.getResponseBodyAsString().split( ","); for (int i = 0; i < districtArray.length; i++) { if (districtName.indexOf(districtArray[i].substring(7)) != -1) { cityCode.append("01").append( districtArray[i].substring(4, 6));// 直辖市或港澳台代码获取结束,6位 } } if (cityCode.length() < 6) { cityCode.append("0101"); } } } else {// 省市 get = new GetMethod("http://m.weather.com.cn/data5/city" + provinceCode + ".xml"); String[] cityArray = null; if (client.executeMethod(get) == HttpStatus.SC_OK) { cityArray = get.getResponseBodyAsString().split(",");// 获取到了城市数组 } if (StringUtils.isEmpty(cityName)) {// 没有取到城市名 for (int i = 0; i < cityArray.length; i++) { if (districtName.indexOf(cityArray[i].substring(5)) != -1) { cityCode.append(cityArray[i].substring(2, 4)).append( "01");// 省直管地区代码获取结束,6位 } } } else if (StringUtils.isNotEmpty(cityName)) {// 取得了城市名 for (int i = 0; i < cityArray.length; i++) { if (cityName.indexOf(cityArray[i].substring(5)) != -1) { cityCode.append(cityArray[i].substring(2, 4)); } } get = new GetMethod("http://m.weather.com.cn/data5/city" + cityCode.toString() + ".xml");// 请求4位城市代码 String[] districtArray = null; if (client.executeMethod(get) == HttpStatus.SC_OK) { districtArray = get.getResponseBodyAsString().split(","); } for (int i = 0; i < districtArray.length; i++) { if (districtName.indexOf(districtArray[i].substring(7)) != -1) { cityCode.append(districtArray[i].substring(4, 6)); } } if (cityCode.toString().length() == 4) { cityCode.append("01"); } } } if (cityCode.length() == 6) { // 获取城市代码结束,获取天气页面代号 GetMethod weatherCodeGet = new GetMethod( "http://m.weather.com.cn/data5/city" + cityCode.toString() + ".xml"); String weatherCode = ""; if (client.executeMethod(weatherCodeGet) == HttpStatus.SC_OK) { weatherCode = weatherCodeGet.getResponseBodyAsString() .substring(7); } GetMethod weatherGet = new GetMethod( "http://m.weather.com.cn/data/" + weatherCode + ".html"); InputStream weatherInfo = null; if (client.executeMethod(weatherGet) == HttpStatus.SC_OK) { weatherInfo = weatherGet.getResponseBodyAsStream(); // HashMap<String, String> map = new HashMap<String, String> (); JsonFactory jsonFactory = new MappingJsonFactory(); JsonParser jsonParser = jsonFactory .createJsonParser(weatherInfo); // 跳到结果集的开始 jsonParser.nextToken(); while (jsonParser.nextToken() != JsonToken.END_OBJECT) { // 跳转到Value jsonParser.nextToken(); map.put(jsonParser.getCurrentName(), jsonParser.getText()); } // 封装VO,向页面传递数据 Weather todayWeather = new Weather(); // 当日数据 todayWeather.setCity(map.get("city")); todayWeather.setDate(map.get("date_y")); todayWeather.setLunarDate(map.get("date")); todayWeather.setWeek(map.get("week")); todayWeather.setFcTime(map.get("fchh")); todayWeather.setTemperature(map.get("temp1")); todayWeather.setWeather(map.get("weather1")); todayWeather.setWind(map.get("wind1")); System.out.println(todayWeather); } } else { System.out.println("没有获取到天气信息"); } } }
程序中对城市名称做了一点限制,直辖市等级为省,没有城市名,有城市名可以不用输入到区县,又如:
String name = "河南洛阳"; String name = "河南洛阳涧西";
这都是可以的,程序中对城市名称的处理可能不很准确,真实环境中这省市区这三个字段应该分别提供,截字符串可能会有偏差,本程序测试了大多数情况,是可行的。
本文系作者的实践探索,欢迎交流,希望对使用者有用。
评论
20 楼
yu_duo
2012-09-24
写的好详细~~,虽然我看的晚了,但是很受用~谢谢~~
19 楼
lindakun
2012-03-01
感谢楼主~~~
18 楼
sarin
2011-08-02
ariestiger 写道
{"weatherinfo":{
"city":"上海",
"city_en":"shanghai",
"date_y":"2011年8月2日",
"date":"辛卯年",
"week":"星期二",
"fchh":"08",
"cityid":"101020100",
"temp1":"34℃~28℃",
"temp2":"33℃~27℃","temp3":"33℃~26℃","temp4":"31℃~25℃","temp5":"30℃~25℃","temp6":"30℃~26℃","tempF1":"93.2℉~82.4℉","tempF2":"91.4℉~80.6℉","tempF3":"91.4℉~78.8℉","tempF4":"87.8℉~77℉","tempF5":"86℉~77℉","tempF6":"86℉~78.8℉","weather1":"雷阵雨转多云","weather2":"雷阵雨转多云","weather3":"多云","weather4":"雷阵雨","weather5":"雷阵雨转阵雨","weather6":"雷阵雨转多云","img1":"4","img2":"1","img3":"4","img4":"1","img5":"1","img6":"99","img7":"4","img8":"99","img9":"4","img10":"3","img11":"4","img12":"1","img_single":"4","img_title1":"雷阵雨","img_title2":"多云","img_title3":"雷阵雨","img_title4":"多云","img_title5":"多云","img_title6":"多云","img_title7":"雷阵雨","img_title8":"雷阵雨","img_title9":"雷阵雨","img_title10":"阵雨","img_title11":"雷阵雨","img_title12":"多云","img_title_single":"雷阵雨","wind1":"东南风3-4级","wind2":"东南风3-4级","wind3":"东风3-4级转东北风4-5级","wind4":"东北风3-4级转北风4-5级","wind5":"北风5-6级","wind6":"西北风5-6级","fx1":"东南风","fx2":"东南风","fl1":"3-4级","fl2":"3-4级","fl3":"3-4级转4-5级","fl4":"3-4级转4-5级","fl5":"5-6级","fl6":"5-6级","index":"炎热","index_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。","index48":"炎热","index48_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。","index_uv":"中等","index48_uv":"中等","index_xc":"不宜","index_tr":"一般","index_co":"较不舒适","st1":"31","st2":"26","st3":"30","st4":"24","st5":"32","st6":"24","index_cl":"较不宜","index_ls":"不宜"}}
算了, 我懒得整这个格式了,这什么temp1,temp2,img1,img2,是今天,明天,后面,,,,之后总共六天的温度,图标,index_uv是紫外线强度,这是用的英文缩写,index_xc是洗车指数,这是拼音缩写,index_tr是旅游指数,travell,英文缩写,index_co是comfortable,舒适度指数,英文缩写,index_cl是晨练指数,拼音缩写,index_ls是晾晒指数,拼音缩写,我郁了个闷的
"city":"上海",
"city_en":"shanghai",
"date_y":"2011年8月2日",
"date":"辛卯年",
"week":"星期二",
"fchh":"08",
"cityid":"101020100",
"temp1":"34℃~28℃",
"temp2":"33℃~27℃","temp3":"33℃~26℃","temp4":"31℃~25℃","temp5":"30℃~25℃","temp6":"30℃~26℃","tempF1":"93.2℉~82.4℉","tempF2":"91.4℉~80.6℉","tempF3":"91.4℉~78.8℉","tempF4":"87.8℉~77℉","tempF5":"86℉~77℉","tempF6":"86℉~78.8℉","weather1":"雷阵雨转多云","weather2":"雷阵雨转多云","weather3":"多云","weather4":"雷阵雨","weather5":"雷阵雨转阵雨","weather6":"雷阵雨转多云","img1":"4","img2":"1","img3":"4","img4":"1","img5":"1","img6":"99","img7":"4","img8":"99","img9":"4","img10":"3","img11":"4","img12":"1","img_single":"4","img_title1":"雷阵雨","img_title2":"多云","img_title3":"雷阵雨","img_title4":"多云","img_title5":"多云","img_title6":"多云","img_title7":"雷阵雨","img_title8":"雷阵雨","img_title9":"雷阵雨","img_title10":"阵雨","img_title11":"雷阵雨","img_title12":"多云","img_title_single":"雷阵雨","wind1":"东南风3-4级","wind2":"东南风3-4级","wind3":"东风3-4级转东北风4-5级","wind4":"东北风3-4级转北风4-5级","wind5":"北风5-6级","wind6":"西北风5-6级","fx1":"东南风","fx2":"东南风","fl1":"3-4级","fl2":"3-4级","fl3":"3-4级转4-5级","fl4":"3-4级转4-5级","fl5":"5-6级","fl6":"5-6级","index":"炎热","index_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。","index48":"炎热","index48_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。","index_uv":"中等","index48_uv":"中等","index_xc":"不宜","index_tr":"一般","index_co":"较不舒适","st1":"31","st2":"26","st3":"30","st4":"24","st5":"32","st6":"24","index_cl":"较不宜","index_ls":"不宜"}}
算了, 我懒得整这个格式了,这什么temp1,temp2,img1,img2,是今天,明天,后面,,,,之后总共六天的温度,图标,index_uv是紫外线强度,这是用的英文缩写,index_xc是洗车指数,这是拼音缩写,index_tr是旅游指数,travell,英文缩写,index_co是comfortable,舒适度指数,英文缩写,index_cl是晨练指数,拼音缩写,index_ls是晾晒指数,拼音缩写,我郁了个闷的
这都是网站直接定义好的,可以直接使用
17 楼
ariestiger
2011-08-02
{"weatherinfo":{
"city":"上海",
"city_en":"shanghai",
"date_y":"2011年8月2日",
"date":"辛卯年",
"week":"星期二",
"fchh":"08",
"cityid":"101020100",
"temp1":"34℃~28℃",
"temp2":"33℃~27℃","temp3":"33℃~26℃","temp4":"31℃~25℃","temp5":"30℃~25℃","temp6":"30℃~26℃","tempF1":"93.2℉~82.4℉","tempF2":"91.4℉~80.6℉","tempF3":"91.4℉~78.8℉","tempF4":"87.8℉~77℉","tempF5":"86℉~77℉","tempF6":"86℉~78.8℉","weather1":"雷阵雨转多云","weather2":"雷阵雨转多云","weather3":"多云","weather4":"雷阵雨","weather5":"雷阵雨转阵雨","weather6":"雷阵雨转多云","img1":"4","img2":"1","img3":"4","img4":"1","img5":"1","img6":"99","img7":"4","img8":"99","img9":"4","img10":"3","img11":"4","img12":"1","img_single":"4","img_title1":"雷阵雨","img_title2":"多云","img_title3":"雷阵雨","img_title4":"多云","img_title5":"多云","img_title6":"多云","img_title7":"雷阵雨","img_title8":"雷阵雨","img_title9":"雷阵雨","img_title10":"阵雨","img_title11":"雷阵雨","img_title12":"多云","img_title_single":"雷阵雨","wind1":"东南风3-4级","wind2":"东南风3-4级","wind3":"东风3-4级转东北风4-5级","wind4":"东北风3-4级转北风4-5级","wind5":"北风5-6级","wind6":"西北风5-6级","fx1":"东南风","fx2":"东南风","fl1":"3-4级","fl2":"3-4级","fl3":"3-4级转4-5级","fl4":"3-4级转4-5级","fl5":"5-6级","fl6":"5-6级","index":"炎热","index_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。","index48":"炎热","index48_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。","index_uv":"中等","index48_uv":"中等","index_xc":"不宜","index_tr":"一般","index_co":"较不舒适","st1":"31","st2":"26","st3":"30","st4":"24","st5":"32","st6":"24","index_cl":"较不宜","index_ls":"不宜"}}
算了, 我懒得整这个格式了,这什么temp1,temp2,img1,img2,是今天,明天,后面,,,,之后总共六天的温度,图标,index_uv是紫外线强度,这是用的英文缩写,index_xc是洗车指数,这是拼音缩写,index_tr是旅游指数,travell,英文缩写,index_co是comfortable,舒适度指数,英文缩写,index_cl是晨练指数,拼音缩写,index_ls是晾晒指数,拼音缩写,我郁了个闷的
"city":"上海",
"city_en":"shanghai",
"date_y":"2011年8月2日",
"date":"辛卯年",
"week":"星期二",
"fchh":"08",
"cityid":"101020100",
"temp1":"34℃~28℃",
"temp2":"33℃~27℃","temp3":"33℃~26℃","temp4":"31℃~25℃","temp5":"30℃~25℃","temp6":"30℃~26℃","tempF1":"93.2℉~82.4℉","tempF2":"91.4℉~80.6℉","tempF3":"91.4℉~78.8℉","tempF4":"87.8℉~77℉","tempF5":"86℉~77℉","tempF6":"86℉~78.8℉","weather1":"雷阵雨转多云","weather2":"雷阵雨转多云","weather3":"多云","weather4":"雷阵雨","weather5":"雷阵雨转阵雨","weather6":"雷阵雨转多云","img1":"4","img2":"1","img3":"4","img4":"1","img5":"1","img6":"99","img7":"4","img8":"99","img9":"4","img10":"3","img11":"4","img12":"1","img_single":"4","img_title1":"雷阵雨","img_title2":"多云","img_title3":"雷阵雨","img_title4":"多云","img_title5":"多云","img_title6":"多云","img_title7":"雷阵雨","img_title8":"雷阵雨","img_title9":"雷阵雨","img_title10":"阵雨","img_title11":"雷阵雨","img_title12":"多云","img_title_single":"雷阵雨","wind1":"东南风3-4级","wind2":"东南风3-4级","wind3":"东风3-4级转东北风4-5级","wind4":"东北风3-4级转北风4-5级","wind5":"北风5-6级","wind6":"西北风5-6级","fx1":"东南风","fx2":"东南风","fl1":"3-4级","fl2":"3-4级","fl3":"3-4级转4-5级","fl4":"3-4级转4-5级","fl5":"5-6级","fl6":"5-6级","index":"炎热","index_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。","index48":"炎热","index48_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。","index_uv":"中等","index48_uv":"中等","index_xc":"不宜","index_tr":"一般","index_co":"较不舒适","st1":"31","st2":"26","st3":"30","st4":"24","st5":"32","st6":"24","index_cl":"较不宜","index_ls":"不宜"}}
算了, 我懒得整这个格式了,这什么temp1,temp2,img1,img2,是今天,明天,后面,,,,之后总共六天的温度,图标,index_uv是紫外线强度,这是用的英文缩写,index_xc是洗车指数,这是拼音缩写,index_tr是旅游指数,travell,英文缩写,index_co是comfortable,舒适度指数,英文缩写,index_cl是晨练指数,拼音缩写,index_ls是晾晒指数,拼音缩写,我郁了个闷的
16 楼
lshoo
2011-03-26
学习了,用httpclient4改写一下。
15 楼
sarin
2011-01-05
niuky 写道
sarin 写道
lqixv 写道
返回的json的各个参数,在哪里有注释?
还有,我想找其中的“空气污浊指数”,找不到。你知道是哪个吗?
还有,我想找其中的“空气污浊指数”,找不到。你知道是哪个吗?
这个只能参考官网页面里的信息和json的信息比对来确定了。
这个官网的json说明在哪呢?》
官网没有对json的说明,只能比对字段信息然后确定含义。
14 楼
niuky
2011-01-05
sarin 写道
lqixv 写道
返回的json的各个参数,在哪里有注释?
还有,我想找其中的“空气污浊指数”,找不到。你知道是哪个吗?
还有,我想找其中的“空气污浊指数”,找不到。你知道是哪个吗?
这个只能参考官网页面里的信息和json的信息比对来确定了。
这个官网的json说明在哪呢?》
13 楼
sarin
2010-12-23
lenj 写道
能否提供下JAR包?
还有当省份的名字为3个字 市的名字为很多字的时候就不通用了
1
还有当省份的名字为3个字 市的名字为很多字的时候就不通用了
1
这里就是之前要处理的地方了,JAR包请参考Maven的设置。
12 楼
lenj
2010-12-23
能否提供下JAR包?
还有当省份的名字为3个字 市的名字为很多字的时候就不通用了
1
还有当省份的名字为3个字 市的名字为很多字的时候就不通用了
1
11 楼
JavaLanguageFun
2010-12-14
写得相当不错,支持一下!!!
10 楼
sarin
2010-12-13
lqixv 写道
返回的json的各个参数,在哪里有注释?
还有,我想找其中的“空气污浊指数”,找不到。你知道是哪个吗?
还有,我想找其中的“空气污浊指数”,找不到。你知道是哪个吗?
这个只能参考官网页面里的信息和json的信息比对来确定了。
9 楼
lqixv
2010-12-13
返回的json的各个参数,在哪里有注释?
还有,我想找其中的“空气污浊指数”,找不到。你知道是哪个吗?
还有,我想找其中的“空气污浊指数”,找不到。你知道是哪个吗?
8 楼
newvirus
2010-12-02
高手啊 学习收藏啦
7 楼
yuhe
2010-11-29
呵呵,感谢楼主。
杰克逊,
杰克逊,
6 楼
sarin
2010-11-27
SpreadDiaries 写道
jackson支持反射类的。参考 ObjectMapper 的 readValue
有可以参考的示例吗?
5 楼
SpreadDiaries
2010-11-26
jackson支持反射类的。参考 ObjectMapper 的 readValue
4 楼
satikey
2010-11-26
sarin 写道
satikey 写道
学习了额,如果是我写的话 我会用 httpclient 4.01
上一篇用的是第4版,这样就都兼顾到了。
好吧,我没有仔细看你的博客内容。呵呵,我的博客才开张,里面也有一个HttpClient3.1写的实例,可以交流一下哦。我和我的公主大人共同维护者。
3 楼
lqixv
2010-11-26
太棒了
写得相当不错,支持一下!!!
写得相当不错,支持一下!!!
2 楼
sarin
2010-11-25
satikey 写道
学习了额,如果是我写的话 我会用 httpclient 4.01
上一篇用的是第4版,这样就都兼顾到了。
1 楼
satikey
2010-11-25
学习了额,如果是我写的话 我会用 httpclient 4.01
发表评论
-
HTML5/CSS3翻转动画(二)
2011-12-31 11:28 9585上一篇我们制作了两行文字的翻转效果,他们是同步进行的, ... -
HTML5/CSS3翻转动画(一)
2011-12-30 13:43 17675翻转动画效果,就是将页面的元素(文字,图片)加入围绕坐 ... -
HTML5/CSS3清爽后台番外篇-添加锁屏效果
2011-10-29 12:34 10280锁屏效果,也就是将屏幕置于模态,不允许用户触发任何动作 ... -
基于HTML5/CSS3的清爽后台管理页面(二)
2011-10-02 09:11 13044本文接上一篇继续来介绍企业级开发中后台管理页面的制作。 ... -
基于HTML5/CSS3的清爽后台管理页面(一)
2011-10-01 21:36 20612后台管理系统是企业级开发中必不可少的组成部分,一般来说 ... -
HTML5绘制饼图实例(二)
2011-08-15 21:16 11228本文接上一讲继续 ... -
HTML5绘制饼图实例(二)
2011-08-15 20:48 8本文接上一讲继续来说明 我们继续来制作饼图示例 ... -
HTML5绘制饼图实例(一)
2011-08-14 15:28 12268HTML5引入Canvas元素 ... -
我的视频教程《中小企业OA系统》
2011-07-29 22:27 7749经过5个月的制作,和华章合作的《中小企业OA系统》Ja ... -
从一道Neusoft题中想到的Java日志API
2011-03-05 09:45 6942先来看看这一季度 ... -
Apache POI组件操作Excel,制作报表(四)
2011-01-04 22:36 10110上一篇我们介绍了如何制作复杂报表的分析和设计,本篇结合 ... -
Apache POI组件操作Excel,制作报表(三)
2010-12-27 23:26 13259上一篇介绍了POI组件操作Excel时如何对单元格和行 ... -
Apache POI组件操作Excel,制作报表(二)
2010-12-19 16:04 18248本文接上一篇继续探究POI组件的使用。 现在来看 ... -
Apache POI组件操作Excel,制作报表(一)
2010-12-16 22:25 42291Apache的POI组件是Jav ... -
使用XStream解析XML(使用HttpClient 4发送请求)
2010-11-07 12:55 9587本文意在简单说明XStream解析XML,配合Http ... -
从一道Neusoft题中想到的IO和Comparator
2010-09-23 10:36 2833Neusoft内部定期举 ... -
Spring支持的Quartz程序调度
2010-09-05 21:45 9677开发时有时会有这样一种需求,定期计算某些数据或者执行某 ... -
Servlet 3(用Java生成GET/POST请求)
2010-08-29 10:59 14623Servlet是SUN指定的Java服务器端编程规范, ... -
使用Fusion Charts制作报表(dom4j生成XML)
2010-07-13 13:03 16828首次看到Fusion Charts是在Bug Free ... -
使用Javabean作为数据源的JasperReport报表(通过WebService/RMI调用数据)
2010-06-18 09:46 7137本文接http://sarin.iteye.com/b ...
相关推荐
3. **反序列化**:将JSON字符串解析为Java对象,以便进一步处理。 4. **操作JSON**:添加、删除、修改JSON对象的键值对,或者遍历JSON数组。 例如,使用org.json库进行解析: ```java import org.json.*; String ...
在这个"json转实体json解析post模拟请求"的例子中,我们将探讨如何在实际应用中处理JSON数据,包括将JSON数据转换为程序中的实体对象,解析JSON以及模拟POST请求。 1. JSON到实体转换: 在Java等面向对象的语言中,...
项目源代码可能会包含如何创建JSON对象、解析JSON字符串、映射到Java对象以及处理JSON数组的例子。 具体到这个"java实现http请求以及解析json与java对象转换"项目,你可以期待以下几个关键知识点: 1. **HTTP请求*...
接下来,我们将讨论如何使用`org.json`库获取和解析JSON数据。假设我们有一个JSON字符串,例如: ```json { "name": "John", "age": 30, "city": "New York" } ``` 在Java中,我们可以使用`JSONObject`类来解析...
// 解析JSON数据... ``` 7. **关闭资源**:最后,别忘了关闭HttpClient和响应实体,以释放资源: ```java EntityUtils.consumeQuietly(entity); response.close(); httpClient.close(); ``` 注意,虽然...
在实际操作中,"HttpRequestDemo"可能是一个Java代码示例,演示了如何使用HttpPost发送请求以及解析JSON响应。这个示例可能包含了创建HttpPost对象、设置URL、添加请求头、构造请求体(可能是JSON格式)、执行请求并...
HttpClient是Apache基金会开发的一个HTTP客户端库,主要用于处理HTTP请求和响应。这个jar包集合包含了多个相关的组件,如...在开发需要频繁进行HTTP交互和解析JSON响应的Java应用时,HttpClient是一个值得信赖的选择。
- **Jackson**:高性能的JSON处理器,支持JSON的序列化和反序列化,提供多种使用方式,如Jackson ObjectMapper。 - **org.json**:一个简单的JSON库,适用于快速开发和小型项目。 - **FastJSON**:阿里巴巴的高...
这个实例主要涉及了如何使用HttpClient发送POST请求,同时处理普通参数和JSON格式参数,以及解析响应内容。下面我们将深入探讨这些知识点。 一、HttpClient基础 HttpClient库提供了一套完整的API,允许开发者构建...
在Android开发中,HttpClient是一个常用...通过以上知识点的学习,你可以理解如何使用HttpClient进行网络请求,以及处理返回的JSON数据。但请注意,对于新的Android项目,最好遵循最新的最佳实践,使用更现代的网络库。
在压缩包中的"使用HttpClient发送json必须的jar包"可能包含了处理JSON数据所必需的库,如`gson-x.x.x.jar`或`jackson-core-x.x.x.jar`、`jackson-databind-x.x.x.jar`等。 在"使用说明.txt"中,通常会详细阐述如何...
3. 解析JSON数据,可能涉及对象和数组的遍历。 4. 创建自定义的ListView适配器,将解析出的数据转换为列表项。 5. 将适配器设置给ListView,完成数据展示。 在实际开发中,还需要考虑异常处理、网络连接状态检查、...
Java提供了多种解析JSON的库,如Jackson、Gson和org.json。以Jackson为例,解析过程如下: ```java import com.fasterxml.jackson.databind.ObjectMapper; // ... ObjectMapper mapper = new ObjectMapper(); ...
在这个demo中,我们将看到如何使用HttpURLConnection发送GET或POST请求,以及如何读取并解析返回的XML和JSON数据。 2. **HttpClient**(通常指的是Apache HttpClient库)提供了更高级的功能,如异步请求、重试策略...
在Java中处理JSON数据时,通常会依赖于特定的库,这些库提供了方便的API来解析、生成和操作JSON对象。在描述中提到的"json解析需要的jar包"是指Java开发中用于处理JSON的库的JAR文件。 以下是一些关键知识点: 1. ...
3. **解析Json数据**: 如果响应体是Json格式,使用Json库(可能是org.json或Jackson)将其转换为Json对象。例如,`JSONObject jsonObject = new JSONObject(responseBody);` 或 `JsonNode jsonNode = new ...
例如,在Servlet中,可以使用HttpServletRequest的getInputStream方法读取请求体,然后通过上述的JSON库进行解析。Spring MVC中,可以使用@RequestBody注解将请求体自动映射到Java对象。 在客户端通过HTTP获取JSON...
这个"httpClient.zip"压缩包提供了一些示例代码,帮助我们理解如何使用HttpClient进行POST和GET请求,以及可能涉及到的JSON数据处理。现在,我们将深入探讨HttpClient的基本使用、GET和POST请求的实现,以及与JSON...
而对于JSON提交,我们可以使用`Jackson`或`Gson`这样的库将Java对象转换为JSON字符串,再创建一个`StringEntity`,设置其内容类型为`application/json`。 在实际应用中,使用HttpClient提交XML、form和JSON数据时,...
接收到的响应通常也是JSON格式,可以使用上述的Jackson或Gson进行解析。 5. **RESTful API开发** 在开发RESTful API时,服务器端通常会使用Spring Boot框架。Spring Boot提供了对JSON的强大支持,比如使用`@...