1
public CityWeather getCityWeather(String cityid) throws IOException {
CityWeather cityWeather=null;
String weatherJson = dao.getWeatherJson(cityid);
// System.out.println(weatherJson);
try {
// 对json数组进行循环,一般应该只返回一个。
JSONTokener jsonParser = new JSONTokener(weatherJson);
JSONObject object = (JSONObject) jsonParser.nextValue();
// 接下来的就是JSON对象的操作了
JSONObject weatherday = object.getJSONObject("weatherinfo");
cityWeather = new CityWeather();
String city = weatherday.get("city").toString();
String city_en = weatherday.get("city_en").toString();
String date_y = weatherday.get("date_y").toString();
String week1 = getWeekDay(date_y);// 今天周几
String week2 = getTomorrowWeekDay(date_y);
String week3 = getAtWeekDay(date_y);
String img1 = weatherday.get("img1").toString();
String img2 = weatherday.get("img2").toString();
String img3 = weatherday.get("img3").toString();
String img4 = weatherday.get("img4").toString();
String img5 = weatherday.get("img5").toString();
String img6 = weatherday.get("img6").toString();
String temp1 = weatherday.get("temp1").toString();// 今天温度
String temp2 = weatherday.get("temp2").toString();// 明天温度
String temp3 = weatherday.get("temp3").toString();// 后天温度
String weather1 = weatherday.get("weather1").toString();// 今天温度
String weather2 = weatherday.get("weather2").toString();// 明天温度
String weather3 = weatherday.get("weather3").toString();// 后天温度
String wind1 = weatherday.get("wind1").toString();//今天风力
String wind2 = weatherday.get("wind2").toString();//明天风力
String wind3 = weatherday.get("wind3").toString();//后天风力
//城市共有信息
cityWeather.setCityname(city);
cityWeather.setCity_en(city_en);
cityWeather.setCityid(cityid);
cityWeather.setDate_y(date_y);
//获得星期
cityWeather.setToddayWeek(week1);
cityWeather.setTommorrowWeek(week2);
cityWeather.setAtWeek(week3);
//获得图片(白天)
cityWeather.setTodayImg1(img1);
cityWeather.setTommorrowImg1(img3);
cityWeather.setAtImg1(img5);
// System.out.println("img1,img3,img5,"+img1+","+img3+","+img5);
//获得图片(夜间)
cityWeather.setTodayImg2(img2);
cityWeather.setTommorrowImg2(img4);
cityWeather.setAtImg2(img6);
// System.out.println("img2,img4,img6,"+img2+","+img4+","+img6);
//获得温度
cityWeather.setTodayTemp(temp1);
cityWeather.setTommorrowTemp(temp2);
cityWeather.setAtTemp(temp3);
//获得天气
cityWeather.setTodayWeather(weather1);
cityWeather.setTommorrowWeather(weather2);
cityWeather.setAtWeather(weather3);
//获得风力
cityWeather.setTodayWind(wind1);
cityWeather.setTommorrowWind(wind2);
cityWeather.setAtWind(wind3);
} catch (Exception e) {
return null;
}
return cityWeather;
}
2
今天学习了一下解析json的知识,把我学习的的一个小例子拿出来和大家分享一下
下面是代码:
public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); String x; JSONObject obj; try { InputStream is = this .getResources().openRawResource(R.raw.json); byte [] buffer = new byte [is.available()] ; is.read(buffer); TextView v = new TextView( this ); String json = new String(buffer, " utf-8 " ); obj = new JSONObject(json); x = obj.getString( " 姓名 " ); Log.d( " ======姓名======== " ,x); x = obj.getString( " 性别 " ); Log.d( " ======性别======== " ,x); x = obj.getString( " 年龄 " ); Log.d( " ======年龄======== " ,x); JSONObject obj1 = obj.getJSONObject( " 学习成绩 " ); x = obj1.getString( " 数学 " ); Log.d( " ======数学======== " ,x); x = obj1.getString( " 语文 " ); Log.d( " ======语文======== " ,x); x = obj1.getString( " 英语 " ); Log.d( " ======英语======== " ,x); JSONArray array = obj1.getJSONArray( " 综合 " ); obj = array.getJSONObject( 0 ); x = obj.getString( " 文科综合 " ); Log.d( " ======文科综合======== " ,x); obj = array.getJSONObject( 1 ); x = obj.getString( " 理科综合 " ); Log.d( " ======理科综合======== " ,x); JSONStringer s = new JSONStringer(); Log.d( " ====================== " ,s.object().key( " a " ).value( " aaa " ).endObject().toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } json文件: { " 姓名 " : " 张三 " , " 性别 " : " 男 " , " 年龄 " : " 22 " , " 学习成绩 " : { " 数学 " : " 60 " , " 语文 " : " 61 " , " 英语 " : " 62 " , " 综合 " : [ { " 文科综合 " : " 100 " }, { " 理科综合 " : " 110 " } ] } }运行截图:
json数据格式解析我自己分为两种;
一种是普通的,一种是带有数组形式的;
普通形式的:
服务器端返回的json数据格式如下:
{ " userbean " :{ " Uid " : " 100196 " , " Showname " : " \u75af\u72c2\u7684\u7334\u5b50 " , " Avtar " : null , " State " : 1 }}
分析代码如下:
// TODO 状态处理 500 200
int res = 0 ;
res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
if (res == 200 ) {
/*
* 当返回码为200时,做处理
* 得到服务器端返回json数据,并做处理
* */
HttpResponse httpResponse = httpClient.execute(httpPost);
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader2 = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String str2 = "" ;
for (String s = bufferedReader2.readLine(); s != null ; s = bufferedReader2
.readLine()) {
builder.append(s);
}
Log.i( " cat " , " >>>>>> " + builder.toString());
JSONObject jsonObject = new JSONObject(builder.toString())
.getJSONObject( " userbean " );
String Uid;
String Showname;
String Avtar;
String State;
Uid = jsonObject.getString( " Uid " );
Showname = jsonObject.getString( " Showname " );
Avtar = jsonObject.getString( " Avtar " );
State = jsonObject.getString( " State " );
带数组形式的:
服务器端返回的数据格式为:
{ " calendar " :
{ " calendarlist " :
[
{ " calendar_id " : " 1705 " , " title " : " (\u4eb2\u5b50)ddssd " , " category_name " : " \u9ed8\u8ba4\u5206\u7c7b " , " showtime " : " 1288927800 " , " endshowtime " : " 1288931400 " , " allDay " : false },
{ " calendar_id " : " 1706 " , " title " : " (\u65c5\u884c) " , " category_name " : " \u9ed8\u8ba4\u5206\u7c7b " , " showtime " : " 1288933200 " , " endshowtime " : " 1288936800 " , " allDay " : false }
]
}
}
分析代码如下:
// TODO 状态处理 500 200
int res = 0 ;
res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
if (res == 200 ) {
/*
* 当返回码为200时,做处理
* 得到服务器端返回json数据,并做处理
* */
HttpResponse httpResponse = httpClient.execute(httpPost);
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader2 = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String str2 = "" ;
for (String s = bufferedReader2.readLine(); s != null ; s = bufferedReader2
.readLine()) {
builder.append(s);
}
Log.i( " cat " , " >>>>>> " + builder.toString());
/**
* 这里需要分析服务器回传的json格式数据,
*/
JSONObject jsonObject = new JSONObject(builder.toString())
.getJSONObject( " calendar " );
JSONArray jsonArray = jsonObject.getJSONArray( " calendarlist " );
for ( int i = 0 ;i < jsonArray.length();i ++ ){
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
CalendarInfo calendarInfo = new CalendarInfo();
calendarInfo.setCalendar_id(jsonObject2.getString( " calendar_id " ));
calendarInfo.setTitle(jsonObject2.getString( " title " ));
calendarInfo.setCategory_name(jsonObject2.getString( " category_name " ));
calendarInfo.setShowtime(jsonObject2.getString( " showtime " ));
calendarInfo.setEndtime(jsonObject2.getString( " endshowtime " ));
calendarInfo.setAllDay(jsonObject2.getBoolean( " allDay " ));
calendarInfos.add(calendarInfo);
}
总结,普通形式的只需用JSONObject ,带数组形式的需要使用JSONArray 将其变成一个list。
一种是普通的,一种是带有数组形式的;
普通形式的:
服务器端返回的json数据格式如下:
{ " userbean " :{ " Uid " : " 100196 " , " Showname " : " \u75af\u72c2\u7684\u7334\u5b50 " , " Avtar " : null , " State " : 1 }}
分析代码如下:
// TODO 状态处理 500 200
int res = 0 ;
res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
if (res == 200 ) {
/*
* 当返回码为200时,做处理
* 得到服务器端返回json数据,并做处理
* */
HttpResponse httpResponse = httpClient.execute(httpPost);
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader2 = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String str2 = "" ;
for (String s = bufferedReader2.readLine(); s != null ; s = bufferedReader2
.readLine()) {
builder.append(s);
}
Log.i( " cat " , " >>>>>> " + builder.toString());
JSONObject jsonObject = new JSONObject(builder.toString())
.getJSONObject( " userbean " );
String Uid;
String Showname;
String Avtar;
String State;
Uid = jsonObject.getString( " Uid " );
Showname = jsonObject.getString( " Showname " );
Avtar = jsonObject.getString( " Avtar " );
State = jsonObject.getString( " State " );
带数组形式的:
服务器端返回的数据格式为:
{ " calendar " :
{ " calendarlist " :
[
{ " calendar_id " : " 1705 " , " title " : " (\u4eb2\u5b50)ddssd " , " category_name " : " \u9ed8\u8ba4\u5206\u7c7b " , " showtime " : " 1288927800 " , " endshowtime " : " 1288931400 " , " allDay " : false },
{ " calendar_id " : " 1706 " , " title " : " (\u65c5\u884c) " , " category_name " : " \u9ed8\u8ba4\u5206\u7c7b " , " showtime " : " 1288933200 " , " endshowtime " : " 1288936800 " , " allDay " : false }
]
}
}
分析代码如下:
// TODO 状态处理 500 200
int res = 0 ;
res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
if (res == 200 ) {
/*
* 当返回码为200时,做处理
* 得到服务器端返回json数据,并做处理
* */
HttpResponse httpResponse = httpClient.execute(httpPost);
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader2 = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String str2 = "" ;
for (String s = bufferedReader2.readLine(); s != null ; s = bufferedReader2
.readLine()) {
builder.append(s);
}
Log.i( " cat " , " >>>>>> " + builder.toString());
/**
* 这里需要分析服务器回传的json格式数据,
*/
JSONObject jsonObject = new JSONObject(builder.toString())
.getJSONObject( " calendar " );
JSONArray jsonArray = jsonObject.getJSONArray( " calendarlist " );
for ( int i = 0 ;i < jsonArray.length();i ++ ){
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
CalendarInfo calendarInfo = new CalendarInfo();
calendarInfo.setCalendar_id(jsonObject2.getString( " calendar_id " ));
calendarInfo.setTitle(jsonObject2.getString( " title " ));
calendarInfo.setCategory_name(jsonObject2.getString( " category_name " ));
calendarInfo.setShowtime(jsonObject2.getString( " showtime " ));
calendarInfo.setEndtime(jsonObject2.getString( " endshowtime " ));
calendarInfo.setAllDay(jsonObject2.getBoolean( " allDay " ));
calendarInfos.add(calendarInfo);
}
总结,普通形式的只需用JSONObject ,带数组形式的需要使用JSONArray 将其变成一个list。