Android 如何快速解析JSON字符串 深碍√TFBOYSˉ_ 2022-07-24 07:14 156阅读 0赞 了解Android的人都知道JSON,JSON是当前最最为通用的两种数据格式之一,对Android有一定了解的人都知道JSON,都知道如何解析JSON无非就是JSONObject和JSONArray两个类的API的使用,但是这样的话在解析较为复杂的JSON字符串的时候会耗费较多的时间,本文就是来讲解如何快速的去解析JSON字符串 接下来会向大家介绍两个东西: gson框架和插件GsonFormat gson架包下载地址: [http://download.csdn.net/detail/w18756901575/9521813][http_download.csdn.net_detail_w18756901575_9521813] 注:对NoHttp不了解的可以参考我的另一篇博客: [http://blog.csdn.net/w18756901575/article/details/51303356][http_blog.csdn.net_w18756901575_article_details_51303356] 当然也可以使用你自己习惯的网络请求方式 上代码: package wkk.demo5; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import com.yolanda.nohttp.NoHttp; import com.yolanda.nohttp.OnResponseListener; import com.yolanda.nohttp.Request; import com.yolanda.nohttp.RequestMethod; import com.yolanda.nohttp.RequestQueue; import com.yolanda.nohttp.Response; import org.json.JSONObject; public class MainActivity extends AppCompatActivity { private String appkey = "006eb154538b436f875b462503de9d12"; private String url = "http://api.avatardata.cn/Joke/QueryJokeByTime"; public RequestQueue requestQueue; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); NoHttp.init(getApplication()); requestQueue = NoHttp.newRequestQueue(); Request<JSONObject> request = NoHttp.createJsonObjectRequest(url, RequestMethod.POST); request.add("key", appkey); request.add("time", "1418816972"); request.add("sort", "asc"); requestQueue.add(1, request, new OnResponseListener<JSONObject>() { @Override public void onStart(int what) { } @Override public void onSucceed(int what, Response<JSONObject> response) { JSONObject jsonObject = response.get(); Log.d("测试", jsonObject.toString()); } @Override public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) { Log.d("测试", exception.toString()); } @Override public void onFinish(int what) { } }); } } ![20160517083816050][] 好,得到数据之后对数据进行解析: @Override public void onSucceed(int what, Response<JSONObject> response) { JSONObject jsonObject = response.get(); Log.d("测试", jsonObject.toString()); //首先创建一个Gson对象 Gson gson = new Gson(); //Gson类中有一个方法 fromJSon 参数分别为Json类型的字符串 还有T类型的.class //T是泛型 不明白的可以去百度一下 //此方法会返回一个T类型的值 T t = gson.fromJson(jsonObject.toString(), T.class); } 但是这个T类应该如何编写呢? 比较笨的写法Object对应类,Array对性集合,然后相同的变量名等等,比较麻烦,我们这里来使用GsonFormat这个插件来快速的编写Gson所需要的实体类 下载安装插件: Android studio File→Settings..→Plugins→Browse repositores..搜索GsonFormat ![20160517083931479][] 然后下载安装,完成之后重启Android studio,我的是安装好的所以右侧界面会有所不同, 然后新建一个类,快捷键Alt+Insert ![20160517084116247][] 选择GsonFormat并将Json字符串粘贴进去 ![20160517084210092][] 点击OK ![20160517084251937][] ![20160517084347610][] 这样就完成了实体类的编写了 然后解析: @Override public void onSucceed(int what, Response<JSONObject> response) { JSONObject jsonObject = response.get(); Log.d("测试", jsonObject.toString()); //首先创建一个Gson对象 Gson gson = new Gson(); //Gson类中有一个方法 fromJSon 参数分别为Json类型的字符串 还有T类型的实体类.class //T是泛型 不明白的可以去百度一下 //此方法会返回一个T类型的值 JsonBean jsonBean = gson.fromJson(jsonObject.toString(), JsonBean.class); //这个jsonBean就是我们所需要的数据,里面的各个属性就对应Json字符串里面的各个字段 Log.d("测试", String.valueOf(jsonBean.getError_code())); Log.d("测试", jsonBean.getReason()); List<JsonBean.ResultBean> list= jsonBean.getResult(); for(JsonBean.ResultBean resultBean:list){ Log.d("测试",resultBean.getContent()); } } Log如下: ![20160517085221056][] 怎么样,是不是很方便呢? 再多讲两句,有时候我们想要利用Gson来解析JSONArray,但是Gson只有解析JSONObject的方法,那怎么办呢?也不难,可以利用GsonFormat来将Array中的一个对象封装成一个实体类,然后for循环遍历JSONArray,将其中的每一个对象当做一个JSONObject来进行解析就行了 例如: List<T> list1=new ArrayList<T>(); JSONArray jsonArray=new JSONArray(); for (int i=0;i<jsonArray.length();i++){ Gson gson1 = new Gson(); T t= gson1.fromJson(jsonArray.getString(i),T.class); list1.add(t); } 源码下载: [http://download.csdn.net/detail/w18756901575/9522271][http_download.csdn.net_detail_w18756901575_9522271] [http_download.csdn.net_detail_w18756901575_9521813]: http://download.csdn.net/detail/w18756901575/9521813 [http_blog.csdn.net_w18756901575_article_details_51303356]: http://blog.csdn.net/w18756901575/article/details/51303356 [20160517083816050]: /images/20220722/f12208bcc6174b1e998d83dbf54b3d5a.png [20160517083931479]: /images/20220722/f86c254d06f041e5b3c2f8f32e1f040f.png [20160517084116247]: /images/20220722/4071acb9a6df439abd871e5c5521e9e0.png [20160517084210092]: /images/20220722/cb3c2aab1a4c4f6c8dfbeac750bc94ed.png [20160517084251937]: /images/20220722/46381e24f9434eaf86611214d77a0cbd.png [20160517084347610]: /images/20220722/7d4b5e88963e4023a336f79b2f41a7ff.png [20160517085221056]: /images/20220722/5361786144324176924e1e0fa6088b27.png [http_download.csdn.net_detail_w18756901575_9522271]: http://download.csdn.net/detail/w18756901575/9522271
还没有评论,来说两句吧...