再开始之前创建一个get_data.json文件,然后在文件中写入
[{"id":"5","version":"5.5","name":"Angry Birds"},
{"id":"6","version":"7.0","name":"Clash of Cleans"},
{"id":"7","version":"3.5","name":"Hey Day"}]
然后放在自己的服务器中并尝试访问。
使用JSONObject
解析Json数据有很多方法,可以使用官方的JSONObject,也可以使用谷歌开源的GSON,另外,一些第三方的开源库如Jackson、FastJSON等也非常不错。
在接收到服务器返回信息的代码中添加
parseJSONWithJSONObject(response);
private void parseJSONWithJSONObject(String jsonData){
try{
JSONArray jsonArray=new JSONArray(jsonData);
for(int i=0;i<jsonArray.length();i++){
JSONObject jsonObject=jsonArray.getJSONObject(i);
String id=jsonObject.getString("id");
String name=jsonObject.getString("name");
String version=jsonObject.getString("version");
Log.d("aaa","id is"+id);
Log.d("aaa","name is"+name);
Log.d("aaa","version is"+version);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
使用GSON
- GSON开源库会让解析JSON数据的工作简单到你不敢想象的地步。
- 不过GSON并没有添加到Android官方的API中,因此如果我们想要使用这个功能的话,我们需要下载它的jar包,下载地址是:http://code.google.com/p/google-gson/downloads/list
GSON的特点
比如说:
{"name":"Tom","age":20}
那我们可以定义一个Person类,并加入name和age这两个字段,然后只需要简单的调用如下代码就可以将JSON数据自动解析成一个Person对象了。
Gson gson=new Gson();
Person person=gson.fromJson(jsonData,Person.class);
如果需要解析某一段Json数组会稍微麻烦一点,需要借助TypeToken将期望解析成的数据类型传入到fromJson()方法中,如下所示:
List<Person> people=gson.fromJson(jsonData,new TypeToken<List<Person>>(){}.getType());
继续上文的示例
首先增加一个App类,并加入id,name和version这三个字段,如下所示:
public class App{
private String id;
private String name;
private String version;
public String getId(){
return id;
}
public void setId(String id){
this.id=id
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public String getVersion(){
return version;
}
public void setVersion(String version){
this.version=version;
}
}
在接收到服务器返回信息的代码中添加
parseJSONWithGSON(response);
private void parseJSONWithGSON(String jsonData){
Gson gson=new Gson();
List<App> applist =gson.fromJson(jsonData,new TypeToken<List<App>>(){}.getType());
for(App app:appList){
Log.d("AA","id is"+app.getId());
Log.d("AA","name is"+app.getName());
Log.d("AA","version is "+app.getVersion());
}
}
}
这样就能得到与上面一样的输出。