Android 如何快速解析JSON字符串

了解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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值