《第一行代码》第二版 学习总结24 JSON数据解析
程序开发
2023-09-12 09:38:33
最近利用下班时间,找了看什么书比较适合初学android的朋友,很多人推荐了这本书,于是就买了一本,感觉看书,思考,动手,再思考和总结这样过程还是很有必要的,于是就打算把自己学习的东西简单的总结一下;方便自己以后查找,也有利于学习的巩固。在这里首先要感谢一下书籍的作者——郭霖前辈。
之前几篇介绍了关于如何访问网络数据,HttpURLConnection基本使用,OkHttp基本使用;因为网络传输数据(文本数据)常用的用两种(XML和JSON)后者更轻量,但是语义没有前者好;但是毫无疑问,对于两种数据的处理,是我们网络访问数据避免不了的问题,今天我们就来看看Android对JSON的解析实现。如果你对JSON了解较少,你可以查看我的另一篇博客,里面有关于JSON的基本介绍。
1,准备工作
这篇文章和XML数据解析是“兄弟篇”,准备工作参见XML数据解析;我这里给出原始的JSON数据如下(test.json):
[
{
"name":"why",
"age":"26",
"sex":"male"
},
{
"name":"jr",
"age":"24",
"sex":"female"
}]
2,示例代码
MainActivity.java代码:
package com.hfut.operationjson;import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.io.IOException;
import java.util.List;import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class MainActivity extends AppCompatActivity {EditText jsonName;TextView jsonContent;Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:jsonContent.setText((String) msg.obj);break;}}};public final String localURL = "http://192.168.31.2:8088/";private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);jsonName = findViewById(R.id.json_name);jsonContent = findViewById(R.id.json_content);}public void jSONObjectParse(View view) {getData(view.getId());}public void gSONParse(View view) {getData(view.getId());}//JSONObject对象解析private String parseJSONwithJSONObject(String jsonData) {StringBuilder stringBuilder = new StringBuilder();try {JSONArray array = new JSONArray(jsonData);Log.i(TAG, "parseJSONwithJSONObject: "+array.length());//遍历json串,获取每一个json对象,在取键值对数据for (int i = 0; i < array.length(); i++) {JSONObject jsonObject = array.getJSONObject(i);String name = jsonObject.getString("name");String age = jsonObject.getString("age");String sex = jsonObject.getString("sex");stringBuilder.append(" name:"+name+"; age:"+age+"; sex:"+sex+"n");}} catch (JSONException e) {e.printStackTrace();}return stringBuilder.toString();}//GSON解析private String parseJSONwithGSON(String jsonData) {Gson gson=new Gson();StringBuilder stringBuilder = new StringBuilder();//通过json字符串获取对象数组List list=gson.fromJson(jsonData,new TypeToken>(){}.getType());for (int i = 0; i < list.size(); i++) {Student student=list.get(i);String name = student.getName();String age =student.getAge();String sex = student.getSex();stringBuilder.append(" name:"+name+"; age:"+age+"; sex:"+sex+"n");}return stringBuilder.toString();}private void getData(final int methodID){final StringBuilder stringBuilder = new StringBuilder();new Thread(new Runnable() {@Overridepublic void run() {String tempUrl = localURL + jsonName.getText().toString();OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().url(tempUrl).build();try {Response response = okHttpClient.newCall(request).execute();String result = response.body().string();Message message = new Message();String parsedData="";//点击不同按钮,执行不同的解析方法switch (methodID){case R.id.JSONObjectWay:parsedData=parseJSONwithJSONObject(result);stringBuilder.append("解析方式为:JSONObjectWayn");break;case R.id.GSONWay:parsedData=parseJSONwithGSON(result);stringBuilder.append("解析方式为:GSONWayn");break;}stringBuilder.append("源数据为:n");stringBuilder.append(result+"n");stringBuilder.append("解析数据结果:n");stringBuilder.append(parsedData);message.what = 1;message.obj = stringBuilder.toString();handler.sendMessage(message);Log.i(TAG, "run: " + result);} catch (IOException e) {e.printStackTrace();}}}).start();}
}
Student.java代码:
package com.hfut.operationjson;/*** author:why* created on: 2018/4/12 15:19* description:*/
public class Student {private String name;private String age;private String sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
}
activity_main.xml代码:
主配置文件AndroidManifest.xml代码:
3,运行结果
第一步:运行程序
第二步:点击“JSONObject解析JSON”
第三步:点击“GSON解析JSON”
其实有很多不错的开源库用于处理JSON数据,但是我觉得基本的使用这两种方式足够了。这里我写的非常的简单,其实你在我的另一篇博客里面会发现,其实GSON功能还是非常多的。
注:欢迎扫码关注
标签:
上一篇:
腾讯开源了一款 Markdown 编辑器,易扩展、功能全,很好用!
下一篇:
相关文章
-
无相关信息