9.4 解析JSON格式数据
比起XML,JSON的主要优势在于它的体积更小,在网络上传输的时候可以更省流量。但是缺点在于语义性较差,看起来不如XML直观。
在开始之前,需要在服务器的/htdocs目录中新建一个get_data.json的文件并编辑:
//json格式 [{"id":"5","version":"5.5","name":"Wang"}, {"id":"3","version":"3.0","name":"Xiong"}, {"id":"1","version":"3.1","name":"Wu"}]
这时在浏览器中访问http://127.0.0.1/get_data.json网址就可以查看到上面的内容
9.4.1 使用JSONObject
解析JSON数据也有很多种方法,这里介绍两种JSONObject和GSON。
//修改MainActivity中的代码
public class MainActivity extends AppCompatActivity implements Views.OnClickListener {
...
private void sendRequestWithOkHttp() {
new Thread(new Runnable() {
@Override
public void run() {
try {
OkHttpClient client = new OkHttpClient();
//指定访问的服务器地址是电脑本机
Request request = new Request.Builder().url("http://10.0.2.2/get_data.json").build();
Response response = Client.newCall(request).execute();
String responseData = response.body().string();
//解析服务器返回的数据
parseJSONWithJSONObject(responseData);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
...
private void parseJSONWithJSONObject(String jsonData) {
try {
//将服务器返回的数据传入一个JSONArray对象中
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("MainAct