GSON解析数据(包括json解析)

GSOn作用:
把需要解析的数据(字符串)转换成对象或把对象转换为 字符串

使用JSONView工具:
把需要解析的数据放在assets目录下:

image.png

image.png

image.png

xml:
···
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.gson.MainActivity">

<Button
    android:id="@+id/button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Gson解析" />

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:textSize="20sp" />
    </LinearLayout>
</ScrollView>

</LinearLayout>

···
------------------------------------代码---------------
···
package com.example.wangye.zknewstest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.google.gson.Gson;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.List;

public class MainActivity extends AppCompatActivity {
Button btNative, btGson;
TextView tx;
String json = "";
String content = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}

public void init(){
    try {
        InputStream is = getAssets().open("zk_new_json.txt");
        ByteArrayOutputStream bs = new ByteArrayOutputStream();
        byte buffer[] = new byte[512];
        int length = -1;
        while(   ( length = is.read(buffer)) != -1){
            bs.write(buffer,0,length);
            bs.flush();
        }
        is.close();
        bs.close();
        json = bs.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }
    btNative = (Button) findViewById(R.id.button);
    btNative.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            parseJsonByNative(json);
        }
    });
    btGson = (Button) findViewById(R.id.button2);
    btGson.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            parseJsonByGson(json);
        }
    });
    tx = (TextView) findViewById(R.id.textView);
}

public void parseJsonByNative(String json){
    try {
        JSONObject jsonObject = new JSONObject(json);
        JSONObject data = jsonObject.getJSONObject("data");
        JSONArray course = data.getJSONArray("course");
        for (int i = 0; i < course.length(); i++) {
            JSONObject courseObject = course.getJSONObject(i);
            JSONArray courseDetail = courseObject.getJSONArray("courseDetail");

            String professional = courseDetail.getJSONObject(0).getString("professional");
            content += "专业:"+professional+"\n";
            String university = courseDetail.getJSONObject(1).getString("university");
            content += "大学:"+university+"\n";
            String brief = courseDetail.getJSONObject(2).getString("brief");
            content += "专业介绍:"+brief+"\n";
            String region = courseDetail.getJSONObject(3).getString("region");
            content += "地区:"+region+"\n";
            String require = courseDetail.getJSONObject(4).getString("require");
            content += "要求:"+require+"\n";
            String frequency = courseDetail.getJSONObject(5).getString("frequency");
            content += "考试周期:"+frequency+"\n";
            String subject = courseDetail.getJSONObject(6).getString("subject");
            content += "考试科目:"+subject+"\n";
            JSONArray exams = courseDetail.getJSONObject(7).getJSONArray("exams");
            for (int j = 0; j < exams.length(); j++) {
                JSONObject examsObject = exams.getJSONObject(j);
                JSONArray examDetail = examsObject.getJSONArray("examDetail");
                String examTimeYear = examDetail.getJSONObject(0).getString("examTimeYear");
                content += "考试年份:"+examTimeYear+"\n";
                String examTimeMonth = examDetail.getJSONObject(1).getString("examTimeMonth");
                content += "考试月份:"+examTimeMonth+"\n";
                String signUpTime = examDetail.getJSONObject(2).getString("signUpTime");
                content += "报名时间:"+signUpTime+"\n";
                String examScore = examDetail.getJSONObject(4).getString("examScore");
                if(examScore.equals("null")){
                    content += "公布成绩:"+"待定"+"\n";
                }else{
                    content += "公布成绩:"+examScore+"\n";
                }
                JSONArray examDay = examDetail.getJSONObject(3).getJSONArray("examDay");
                for (int k = 0; k < examDay.length(); k++) {
                    JSONObject examDayObject = examDay.getJSONObject(k);
                    JSONArray day = examDayObject.getJSONArray("day");
                    String timeDay = day.getJSONObject(0).getString("timeDay");
                    content += "考试日期:"+timeDay+"\n";
                    JSONArray timeUp = day.getJSONObject(1).getJSONArray("timeUp");
                    String timeUpString="";
                    if(timeUp.length() == 1){
                        timeUpString = "暂无考试安排";
                    }
                    if(timeUp.length() == 2){
                        timeUpString = "考试时间:"+timeUp.getString(0)+"\n考试科目:"+timeUp.getString(1);
                    }
                    if(timeUp.length() == 3){
                        timeUpString = "考试时间:"+timeUp.getString(0)
                                +"\n考试科目1:"+timeUp.getString(1)
                                +"\n考试科目2:"+timeUp.getString(2);
                    }
                    content += timeUpString+"\n";
                    JSONArray timeDown = day.getJSONObject(2).getJSONArray("timeDown");
                    String timeDownString="";
                    if(timeDown.length() == 1){
                        timeDownString = "暂无考试安排";
                    }
                    if(timeDown.length() == 2){
                        timeDownString = "考试时间:"+timeDown.getString(0)+"\n考试科目:"+timeDown.getString(1);
                    }
                    if(timeDown.length() == 3){
                        timeDownString = "考试时间:"+timeDown.getString(0)
                                +"\n考试科目1:"+timeDown.getString(1)
                                +"\n考试科目2:"+timeDown.getString(2);
                    }
                    content += timeDownString+"\n";
                }
            }
        }
        tx.setText("解析到的数据为:\n"+content);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void parseJsonByGson(String json){
    String data = "";
    Gson gson = new Gson();
    News news = gson.fromJson(json,News.class);
    List<News.DataBean.CourseBean> courseBean = news.getData().getCourse();
    for (int i = 0; i < courseBean.size(); i++) {
        List<News.DataBean.CourseBean.CourseDetailBean> courseDetailBean =
                courseBean.get(i).getCourseDetail();
        data += "专业:"+courseDetailBean.get(0).getProfessional()+"\n";
        data += "大学:"+courseDetailBean.get(1).getUniversity()+"\n";
        data += "专业介绍:"+courseDetailBean.get(2).getBrief()+"\n";
        data += "地区:"+courseDetailBean.get(3).getRegion()+"\n";
        data += "要求:"+courseDetailBean.get(4).getRequire()+"\n";
        data += "考试周期:"+courseDetailBean.get(5).getFrequency()+"\n";
        data += "考试科目:"+courseDetailBean.get(6).getSubject()+"\n";
        List<News.DataBean.CourseBean.CourseDetailBean.ExamsBean> examsBean =
                courseDetailBean.get(7).getExams();
        for (int j = 0; j < examsBean.size(); j++) {
             List<News.DataBean.CourseBean.CourseDetailBean.ExamsBean.ExamDetailBean> examDetailBean =
                     examsBean.get(j).getExamDetail();
            data += "考试年份:"+examDetailBean.get(0).getExamTimeYear()+"\n";
            data += "考试月份:"+examDetailBean.get(1).getExamTimeMonth()+"\n";
            data += "登记时间:"+examDetailBean.get(2).getSignUpTime()+"\n";
            data += "公布成绩:"+examDetailBean.get(4).getExamScore()+"\n";
            List<News.DataBean.CourseBean.CourseDetailBean.ExamsBean.ExamDetailBean.ExamDayBean> examDayBean =
                    examDetailBean.get(3).getExamDay();
            for (int k = 0; k < examDayBean.size(); k++) {
                List<News.DataBean.CourseBean.CourseDetailBean.ExamsBean.ExamDetailBean.ExamDayBean.DayBean> dayBean =
                        examDayBean.get(k).getDay();
                data += "考试日期:"+dayBean.get(0).getTimeDay()+"\n";
                List<String> timeUp = dayBean.get(1).getTimeUp();
                if(timeUp.size() == 1){
                    data += "上午暂无考试安排";
                }
                if(timeUp.size() == 2){
                    data += "考试时间:"+timeUp.get(0)+"\n考试科目:"+timeUp.get(1);
                }
                if(timeUp.size() == 3){
                    data += "考试时间:"+timeUp.get(0)+"\n考试科目1:"+timeUp.get(1)+"\n考试科目2:"+timeUp.get(2);
                }
                List<String> timeDown = dayBean.get(2).getTimeDown();
                if(timeDown.size() == 1){
                    data += "上午暂无考试安排";
                }
                if(timeDown.size() == 2){
                    data += "考试时间:"+timeDown.get(0)+"\n考试科目:"+timeDown.get(1);
                }
                if(timeDown.size() == 3){
                    data += "考试时间:"+timeDown.get(0)+
                            "\n考试科目1:"+timeDown.get(1)+
                            "\n考试科目2:"+timeDown.get(2);
                }
            }
        }
    }

    tx.setText("Gson解析:\n"+data);

}

}

···

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容