GSON可以将一段JSON格式的数据 == 自动映射 ==》成一个对象(或对象数组)
(Json:{}表示一个JSONObject对象,[]表示JSONArray数组(其元素就是一个JSONObject对象))
使用GSON:
1. 在app/build.gradle文件中,的dependencies闭包添加:implementation 'com.google.code.gson:gson:2.7'
2. 新建一个类ExampleObject,其字段属性 与 Json数据中的某个JSONObject对象键相对应,及对应getter/setter方法
public class Example{
String a;
String b;
...
String z;
/*以及相应的getter/setter方法*/
}
2. 分2种情况处理:当JSON数据单纯是一个JSONObject对象 {} ,或是JSONArray数组 [ {} ,{} ...] 时
① 当JSON数据单纯是一个JSONObject对象 {},只需要简单的调用如下代码:
Gson gson = new Gson();
ExampleObject eo = gson.fromJson( JSON数据, ExampleObject.class)
② 当JSON数据是JSONArray数组 [ {} ,{} ...] 时,需借助TypeToken类的getType() 将期望解析成的数据类型传入 fromJson() 中
Gson gson = new Gson();
List<ExampleObject> eos = gson.fromJson( JSON数据, new TypeToken<List<ExampleObject>>(){}.getType() );
简单例子(部分代码):
GSON基本使用如上步骤,下面给出例子部分代码:
- 准备:在本地Apache服务器添加一个get_data.json文件,用于测试数据(此次使用了OKHttp)
- 新建类App类,如下:
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;
}
}
- private void sendRequestWithOKHTTP() 在Activity中定义一个方法用于请求数据(使用OKHttp框架)
private void sendRequestWithOKHTTP() {
new Thread(new Runnable() { //新建子线程用于请求
@Override
public void run() {
try {
OkHttpClient client=new OkHttpClient(); //创建OkHttpClient实例
Request request=new Request.Builder() //借助Builder构建Request对象
.url("http://10.0.2.2/get_data.json").build();//指定访问的服务器地址是电脑本地
Response response=client.newCall(request).execute();
//调用OkHttpClient实例的newCall(request)获取Call对象,最后调用call的execute()获取response对象
//服务器返回的数据就在response对象里面
String responseData=response.body().string(); //取出数据
//使用GSon解析Json数据
parseJsonByGSON(responseData);
}catch (IOException e){
e.printStackTrace();
}
}
}).start();
}
-
private void parseJsonByGSON(String jsonData),Gson解析服务器返回的Json数据
private void parseJsonByGSON(String jsonData) {
Gson gson=new Gson();
List<App> appList=gson.fromJson(jsonData,new TypeToken<List<App>>(){}.getType());
for (App app:appList){
Log.d("MainActivity","id 是 :"+app.getId());
Log.d("MainActivity","name 是 :"+app.getName());
Log.d("MainActivity","version 是 :"+app.getVersion());
}
}