Json 数据是android 客户端与服务端进行数据传递,非常重要的数据组织格式。

这篇blog主要来记载如何用alibaba的json解析库,com.alibaba:fastjson,进行json数据转换成java对象

首先,我们先来简单介绍下json数组的组织语法:


{} 双括号表示对象

[] 中括号表示数组

"" 双引号内是属性或值

: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)



现在,我们来看看如何去解析json数据


1.首先创建一个json文档。 我们在res/raw目录下,新建文本json_test.txt,其具体内容如下:

{
    "v": "20160613",
    "type": "1",
    "list": [
        {
            "pkgs":[ "ic_app_phone",
                    "ic_app_phone_other"],
            "loc": "0",
            "screen": "0"
        },

        {
            "pkgs": ["ic_app_settings",
            "ic_app_settings_test1",
            "ic_app_settings_test2"],

            "loc": "11",
            "screen": "0"
        }
    ]
}

注意:key、value(普通类型与数组类型的组织形式)


2.com.alibaba:fastjson包的导入。

在build.gradle文件中 dependencies 内容中加入如下:

compile 'com.alibaba:fastjson:1.2.17'


3.创建Json转换成Java对象的Bean类型。

public class JsonBean {
    public String v;
    public String type;
    public List<Info> list;
  //注意:这里关键字的名字一定要与Json文本中key值相同。
    public static class Info{
        public List<String> pkgs;
        public String loc;
        public String screen ;
  //注意:这里关键字的名字一定要与Json文本中key值相同。

 }}

4. 读入文本,并进行解析

public class Controller {
    private Context mContext;

    public Controller(Context context) {
        mContext = context;
        String jsonStr = getJsonInfoFromRaw();
        JsonBean bean = JSON.parseObject(jsonStr, JsonBean.class);
        printJsonInfo(bean);

    }

    private String getJsonInfoFromRaw(){
        String result="";
        try {
            InputStreamReader inputReader = new InputStreamReader( mContext.getResources().openRawResource(R.raw.json_test));
            BufferedReader bufReader = new BufferedReader(inputReader);
            String line="";

            while((line = bufReader.readLine()) != null)
                result += line;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    private void printJsonInfo(JsonBean bean) {
        String version = bean.v;
        String type = bean.type;
        Log.e("vnbo","vnbo hello test version is "+version + " type is "+type);
        List<JsonBean.Info> list = bean.list;
        if(list != null && list.size() != 0) {
            for(int i = 0; i < list.size(); i++) {
                Log.e("vnbo","vnbo hello test loc is "+list.get(i).loc + " screen is "+list.get(i).screen);
                for(int j = 0 ; j < list.get(i).pkgs.size(); j++) {
                    Log.e("vnbo","vnbo hello test pkgs is "+list.get(i).pkgs.get(j));
                }
            }

        }

    }