带数组形式的:
服务器端返回的数据格式为:
{"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}
]
}
}
public class ParseJSON extends Activity { |
23 |
/** Called when the activity is first created. */ |
25 |
public void onCreate(Bundle savedInstanceState) { |
26 |
super .onCreate(savedInstanceState); |
27 |
setContentView(R.layout.main); |
28 |
String readTwitterFeed = readTwitterFeed(); |
30 |
JSONArray jsonArray = new JSONArray(readTwitterFeed); |
31 |
Log.i(ParseJSON. class .getName(), |
32 |
"Number of entries " + jsonArray.length()); |
33 |
for ( int i = 0 ; i < jsonArray.length(); i++) { |
34 |
JSONObject jsonObject = jsonArray.getJSONObject(i); |
35 |
Log.i(ParseJSON. class .getName(), jsonObject.getString( "text" )); |
37 |
} catch (Exception e) { |
42 |
public String readTwitterFeed() { |
43 |
StringBuilder builder = new StringBuilder(); |
44 |
HttpClient client = new DefaultHttpClient(); |
45 |
HttpGet httpGet = new HttpGet( |
46 |
"http://twitter.com/statuses/user_timeline/vogella.json" ); |
48 |
HttpResponse response = client.execute(httpGet); |
49 |
StatusLine statusLine = response.getStatusLine(); |
50 |
int statusCode = statusLine.getStatusCode(); |
51 |
if (statusCode == 200 ) { |
52 |
HttpEntity entity = response.getEntity(); |
53 |
InputStream content = entity.getContent(); |
54 |
BufferedReader reader = new BufferedReader( |
55 |
new InputStreamReader(content)); |
57 |
while ((line = reader.readLine()) != null ) { |
61 |
Log.e(ParseJSON. class .toString(), "Failed to download file" ); |
63 |
} catch (ClientProtocolException e) { |
65 |
} catch (IOException e) { |
68 |
return builder.toString(); |
[代码] 生成 JSON
01 |
public void writeJSON() { |
02 |
JSONObject object = new JSONObject(); |
04 |
object.put( "name" , "Jack Hack" ); |
05 |
object.put( "score" , new Integer( 200 )); |
06 |
object.put( "current" , new Double( 152.32 )); |
07 |
object.put( "nickname" , "Hacker" ); |
08 |
} catch (JSONException e) { |
11 |
System.out.println(object); |
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。