Android 如何快速解析JSON字符串

来源:互联网 发布:超牛数据恢复注册码 编辑:程序博客网 时间:2024/06/06 00:11

了解Android的人都知道JSON,JSON是当前最最为通用的两种数据格式之一,对Android有一定了解的人都知道JSON,都知道如何解析JSON无非就是JSONObject和JSONArray两个类的API的使用,但是这样的话在解析较为复杂的JSON字符串的时候会耗费较多的时间,本文就是来讲解如何快速的去解析JSON字符串

接下来会向大家介绍两个东西:
gson框架和插件GsonFormat
gson架包下载地址:
http://download.csdn.net/detail/w18756901575/9521813

注:对NoHttp不了解的可以参考我的另一篇博客:
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) {            }        });    }}


好,得到数据之后对数据进行解析:

            @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

然后下载安装,完成之后重启Android studio,我的是安装好的所以右侧界面会有所不同,
然后新建一个类,快捷键Alt+Insert

选择GsonFormat并将Json字符串粘贴进去


点击OK

这样就完成了实体类的编写了

然后解析:

            @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如下:

怎么样,是不是很方便呢?
再多讲两句,有时候我们想要利用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

0 0