Android的JSON数据解析

一、 使用原生方式解析

准备工作:准备一个布局文件,用来显示元数据与转换之后的数据

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_String2JOSNObject"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="使用原生方式:String2JOSNObject " />

    <Button
        android:id="@+id/btn_String2JOSNArray"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="使用原生方式:String2JOSNArray " />

    <Button
        android:id="@+id/btn_String2Bean_Gson"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="使用Gson方式:String2Bean " />

    <Button
        android:id="@+id/btn_String2List_Gson"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="使用Gson方式:String2List " />

    <Button
        android:id="@+id/btn_String2Arrays_Gson"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="使用Gson方式:String2Arrays " />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="元数据"
        android:textColor="@android:color/holo_red_light"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/tv_metadata"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="转换后的数据"
        android:textColor="@android:color/holo_red_light"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/tv_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp" />

</LinearLayout>

1. 使用原生方式---将String转换为JOSNObject

1.1 准备元数据

//使用原生方式: JSONObject2String
JSONObject jsonObject = new JSONObject();
try {
    jsonObject.put("name","小米");
    jsonObject.put("age",1);
    JSONObject familyJOSN = new JSONObject();
    familyJOSN.put("father","米爸");
    familyJOSN.put("mother","米妈");
    jsonObject.put("family",familyJOSN);
    JSONArray hobbyArray = new JSONArray();
    hobbyArray.put("篮球");
    hobbyArray.put("看书");
    jsonObject.put("hobby",hobbyArray);

} catch (JSONException e) {
    e.printStackTrace();
}
metaDataStr = jsonObject.toString();
tv_metadata.setText(jsonObject.toString());

  

1.2 开始转换数据

//使用原生方式:String2JOSNObject
findViewById(R.id.btn_String2JOSNObject).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            JSONObject jsonObject = new JSONObject(metaDataStr);
            Log.e(JOSNActivity.class.getName(),jsonObject.toString());
            String name = jsonObject.getString("name");
            String age = jsonObject.getString("age");
            JSONObject familyJOSN = new JSONObject(String.valueOf(jsonObject.getJSONObject("family")));
            String father = familyJOSN.getString("father");
            String mother = familyJOSN.getString("mother");
            JSONArray hobbyArray = new JSONArray(jsonObject.getJSONArray("hobby").toString());
            String hobby = "";
            for(int i = 0; i < hobbyArray.length(); i ++){
                if(i !=  hobbyArray.length() -1){
                    hobby = hobby + (String) hobbyArray.get(i)+"、";
                }else {
                    hobby = hobby + (String) hobbyArray.get(i);
                }

            }
            String resultStr = "姓名:"+name+",年龄:"+age+",家庭成员:"+father+"、"+mother+",爱好:"+hobby;
            tv_data.setText(resultStr);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
});

  

2.  使用原生方式:将String转换为JOSNArray

2.1 准备元数据

// JSONArray2String
JSONArray array = new JSONArray();
for(int i = 0; i < 2; i ++){
    JSONObject jsonObject = new JSONObject();
    try {
        jsonObject.put("name","小米"+i);
        jsonObject.put("age",22+i);
        array.put(jsonObject);
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
metaDataStr = array.toString();
tv_metadata.setText(metaDataStr);

  

2.2 开始转换数据 

//使用原生方式:String2JOSNArray
findViewById(R.id.btn_String2JOSNArray).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            String resultStr = "";
            JSONArray jsonArray = new JSONArray(metaDataStr);
            for(int i = 0; i < jsonArray.length(); i ++){
                JSONObject jsonObject = (JSONObject) jsonArray.get(i);
                resultStr = resultStr + "第" + i + "组姓名:"+ jsonObject.getString("name") +
                        ",年龄:"+ jsonObject.getString("age")+"\n";
            }
            tv_data.setText(resultStr);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
});

二、 使用GSON解析JSON数据

1.  使用Gson方式:将String转换为Bean

1.1 准备Bean类

static class  Bean{

    public Bean(String name,int age,List<String> hobby){
        this.name = name;
        this.age = age;
        this.hobby = hobby;
        Family family = new Family();
        family.setFather(name+"爸");
        family.setMother(name+"妈");
        this.family = family;
    }

    /**
     * name : 小米
     * family : {"mother":"米妈","father":"米爸"}
     * age : 1
     * hobby : ["篮球","看书"]
     */
    private String name;
    private Family family;
    private int age;
    private List<String> hobby;

    public void setName(String name) {
        this.name = name;
    }

    public void setFamily(Family family) {
        this.family = family;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setHobby(List<String> hobby) {
        this.hobby = hobby;
    }

    public String getName() {
        return name;
    }

    public Family getFamily() {
        return family;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobby() {
        return hobby;
    }

    public static class Family {
        /**
         * mother : 米妈
         * father : 米爸
         */
        private String mother;
        private String father;

        public void setMother(String mother) {
            this.mother = mother;
        }

        public void setFather(String father) {
            this.father = father;
        }

        public String getMother() {
            return mother;
        }

        public String getFather() {
            return father;
        }
    }
}

1.2 准备元数据

//使用Gson方式:Bean2String
Gson gson = new Gson();
List<String> list = new ArrayList<>();
list.add("篮球");
list.add("看书");
Bean bean = new Bean("小米",23,list);
metaDataStr = gson.toJson(bean).toString();
tv_metadata.setText(metaDataStr);

1.3  开始转换数据

//使用Gson方式:String2Bean
findViewById(R.id.btn_String2Bean_Gson).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Gson gson = new Gson();
        Bean resultBean =  gson.fromJson(metaDataStr,Bean.class);
        String name = resultBean.getName();
        int age = resultBean.getAge();
        String father = resultBean.getFamily().getFather();
        String mother = resultBean.getFamily().getMother();
        List<String> list = resultBean.getHobby();
        String hobby = "";
        for(int i = 0; i < list.size(); i ++){
            if(i !=  list.size() -1){
                hobby = hobby + (String) list.get(i)+"、";
            }else {
                hobby = hobby + (String) list.get(i);
            }

        }
        String resultStr = "姓名:"+name+",年龄:"+age+",家庭成员:"+father+"、"+mother+",爱好:"+hobby;
        tv_data.setText(resultStr);
    }
});

2.  使用Gson方式:将String转换为List

2.1 准备元数据

//使用Gson方式:List2String
Gson gson = new Gson();
List<Bean> beans = new ArrayList<>();
List<String> list = new ArrayList<>();
list.add("篮球");
list.add("看书");
Bean bean1 = new Bean("小米",23,list);
Bean bean2 = new Bean("菲菲",24,list);
beans.add(bean1);
beans.add(bean2);
metaDataStr = gson.toJson(beans);
tv_metadata.setText(metaDataStr);

2.2 开始转换数据

//使用Gson方式:String2List
findViewById(R.id.btn_String2List_Gson).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Gson gson = new Gson();
        // Gson为我们提供了TypeToken来实现对泛型的支持,
        List<Bean> beans = gson.fromJson(metaDataStr,new TypeToken<List<Bean>>(){}.getType());
        String resultStr ="";
        for(int i = 0; i < beans.size() ; i++){
            String name = beans.get(i).getName();
            int age = beans.get(i).getAge();
            String father = beans.get(i).getFamily().getFather();
            String mother = beans.get(i).getFamily().getMother();
            resultStr = resultStr + "姓名:"+name+",年龄:"+age+",家庭成员:"+father+"、"+mother+"\n";
        }
        tv_data.setText(resultStr);
    }
});

3.  使用Gson方式:将String转换为Arrays 

3.1 准备元数据

//使用Gson方式:Arrays2String
String[] arrays = {"张三","李四","王五","赵六"};
Gson gson = new Gson();
metaDataStr =  gson.toJson(arrays);
tv_metadata.setText(metaDataStr);

3.2 开始转换数据

//使用Gson方式:String2Arrays 
findViewById(R.id.btn_String2Arrays_Gson).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Gson gson = new Gson();
        //此时String[]当成一个实体类
        String[] arrays = gson.fromJson(metaDataStr,String[].class);
        String resultStr = "";
        for(int i = 0; i < arrays.length;i ++){
            resultStr = resultStr + arrays[i] +";";
        }
        tv_data.setText(resultStr);
    }
});

  

 

  

 

posted @ 2019-04-23 17:07  Ayinger  阅读(1037)  评论(0编辑  收藏  举报