下面是Android解析JSON格式数据的两种方式的完整攻略。
一、使用JSONObject解析JSON数据
1. 引入相关依赖
下面是需要引入的三个依赖:
implementation 'com.android.volley:volley:x.x.x'
implementation 'org.json:json:x.x.x'
2. 创建一个JSON请求
创建一个JSON请求需要一个URL地址和一个Response.Listener<JSONObject>
类型的监听器。当请求成功时,Volley会调用这个监听器并返回一个JSON对象。
String url = "https://jsonplaceholder.typicode.com/todos/1";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
Request.Method.GET ,
url ,
null ,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// 处理返回的JSON数据
}
} ,
null
);
3. 处理返回的JSON数据
当请求成功时,Volley会调用上面创建的监听器。在这个监听器的onResponse
方法中,我们就可以处理返回的JSON数据了。
// JSON数据结构:
// {
// "userId": 1,
// "id": 1,
// "title": "delectus aut autem",
// "completed": false
// }
try {
int userId = response.getInt("userId");
int id = response.getInt("id");
String title = response.getString("title");
boolean completed = response.getBoolean("completed");
Log.d("MainActivity", "userId: " + userId);
Log.d("MainActivity", "id: " + id);
Log.d("MainActivity", "title: " + title);
Log.d("MainActivity", "completed: " + completed);
} catch (JSONException e) {
e.printStackTrace();
}
实例演示
String url = "https://jsonplaceholder.typicode.com/todos/1";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
Request.Method.GET ,
url ,
null ,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
int userId = response.getInt("userId");
int id = response.getInt("id");
String title = response.getString("title");
boolean completed = response.getBoolean("completed");
Log.d("MainActivity", "userId: " + userId);
Log.d("MainActivity", "id: " + id);
Log.d("MainActivity", "title: " + title);
Log.d("MainActivity", "completed: " + completed);
} catch (JSONException e) {
e.printStackTrace();
}
}
} ,
null
);
RequestQueue queue = Volley.newRequestQueue(this);
queue.add(jsonObjectRequest);
二、使用Gson解析JSON数据
1. 引入相关依赖
使用Gson解析JSON数据需要引入以下依赖:
implementation 'com.google.code.gson:gson:x.x.x'
2. 创建一个JSON请求
创建JSON请求的过程同上面所讲的JSONObject解析JSON数据的方式。
3. 解析返回的JSON数据
在创建JSON请求时,我们需要传入一个Response.Listener<JSONObject>
类型的监听器。但是,在使用Gson解析JSON数据时,我们需要传入一个Response.Listener<T>
类型的监听器(其中T
表示我们定义的Java类)。
String url = "https://jsonplaceholder.typicode.com/todos/1";
GsonRequest<Todo> gsonRequest = new GsonRequest<Todo>(
Request.Method.GET ,
url ,
Todo.class ,
new Response.Listener<Todo>() {
@Override
public void onResponse(Todo response) {
// 处理返回的JSON数据
}
} ,
null
);
我们可以先定义一个与返回的JSON数据结构对应的Java类。在上面的代码中,我们传入的是Todo.class
,即我们定义的Todo
类。
public class Todo {
private int userId;
private int id;
private String title;
private boolean completed;
// 具体的getters和setters省略
}
然后在监听器的onResponse
方法中,我们就可以直接使用返回的Todo
对象了。
Todo todo = response;
Log.d("MainActivity", "userId: " + todo.getUserId());
Log.d("MainActivity", "id: " + todo.getId());
Log.d("MainActivity", "title: " + todo.getTitle());
Log.d("MainActivity", "completed: " + todo.isCompleted());
实例演示
String url = "https://jsonplaceholder.typicode.com/todos/1";
GsonRequest<Todo> gsonRequest = new GsonRequest<Todo>(
Request.Method.GET ,
url ,
Todo.class ,
new Response.Listener<Todo>() {
@Override
public void onResponse(Todo response) {
Todo todo = response;
Log.d("MainActivity", "userId: " + todo.getUserId());
Log.d("MainActivity", "id: " + todo.getId());
Log.d("MainActivity", "title: " + todo.getTitle());
Log.d("MainActivity", "completed: " + todo.isCompleted());
}
} ,
null
);
RequestQueue queue = Volley.newRequestQueue(this);
queue.add(gsonRequest);
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android解析JSON格式数据的两种方式(JSONObject和Gson) - Python技术站