Android 之json解析

Android 之json解析

json简介

json是我们在网络传输中经常用到的数据类型之一。那么什么是json呢?
json 全名JavaScript Object Notation。他是存储和交换文本信息的语法。他比XML更小,更快,更容易解析
下面将介绍三种json解析的方式,分别是使用jsonObject,Gson和fastjson方式。

使用jsonObject解析

使用步骤
1. 获取json的字符串。
2. 获取jsonArray数组
3. 对里面的对象逐个解析
    private void parasJSONWithJSONObject(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");
                Log.d("ok","id is" + id);
                Log.d("ok","name is " + name);
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }

使用Gson解析

Gson是google提供的一个开源库,功能很强大。不过这个库没有被添加到Android官方的API中。
所以在进行json解析之前首先我们先添加Gson的开源包。
下载地址为http://download.csdn.net/download/qq_32763643/9898639
Gson的仓库地址为https://github.com/google/gson

使用步骤
    1. 获取json字符串
    2. 获取Gson对象
    3. 通过TypeToken来获取泛型数据类型,再转化成泛型list
    4. 对里面的对象进行解析
     private void parasJSONWithGSON(String jsonData) {
//        创建gson对象
        Gson gson = new Gson();
//        通过TypeToken来获取泛型数据类型,再转化成list
        List<Person> persons =  gson.fromJson(jsonData,new TypeToken<List<Person>>(){ }.getType());
        for (Person person : persons) {
            Log.d("ok","id is "+ person.getId());
            Log.d("ok","name is "+ person.getName());
        }
    }

使用fastjson解析

fastjson是目前阿里巴巴进行的一个开源项目,他功能十分强大,并且使用方法很简单。同样也需要添加包。他的速度比之前的两种方法的速度都要快上许多(大约比gson快六倍)。有兴趣的小伙伴可以去了解下。
资源包下载地址为http://download.csdn.net/download/qq_32763643/9898606
仓库地址为https://github.com/alibaba/fastjson

这里简单的使用了fastjson。为了和上面统一。我们传入的还是还是json的字符串
使用步骤
1. 获取json字符串
2. 将字符串直接转化成泛型list
3. 对里面对象逐个解析

    private void parasJSONWithFastjson(String jsonData) {

        List<Person> persons = JSON.parseArray(jsonData,Person.class);
        for (Person person : persons) {
            Log.d("ok","id is "+ person.getId());
            Log.d("ok","name is "+ person.getName());
        }
    }

json文件为

    [{"id":"5","name":"pf"},
    {"id":"6","name":"dm"}]

下面是传入参数的方法

 private void sendRequsetWithHttpURLConnection() {
//        开启线程发起网络请求
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connection = null;
                String path = "http://10.0.2.2/get_data.json";
                try{
                    URL url = new URL(path);
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    InputStream in = connection.getInputStream();

                    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                    StringBuilder iresponse = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null){
                        iresponse.append(line);
                    }
                    String response = iresponse.toString();
//                  这里使用fastjson的方法
                    parasJSONWithFastjson(response);
                } catch (Exception e){
                    e.printStackTrace();
                } finally {
                    if(connection != null){
                        connection.disconnect();
                    }
                }
            }
        }).start();
    }
发布了36 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_32763643/article/details/75104749