1.概述
1.1 定义
JSON是一种轻量级数据交换格式,全称为Javascript Object Notation,采用完全独立于编程语言的文本格式来储存和表示数据。采用键值对key-value形式。
1.2 数据结构
数据结构 Obeject:对象形式
使用{}包含的键值对结构,
key必须为String类型
value可以是任意类型数据结构或数据类型
Array:数组形式 使用中括号[]表示数据类型是数组,其里面的元素以逗号“,”分隔开 数据类型 String
number
boolean
null
1.3 优点
1.简洁和清晰的层次结构 2.易于阅读和编写,易于机器解析和生成 3.有效的提升网络传输效率
2.Android的JSON解析方式
2.1 概述
JSON解析方式有很多,如下所示:
1.JsonObject和JsonArray Android SDK自带的,对于构造解析复杂的JSON困难 2.Gson Google提供,对象化,流行度比较高 3.FastJson 阿里巴巴提供,速度快 4.LoganSquare 快速解析和序列化 5.Jackson ...... ...... 2.2 使用JSONObject
JSON数据如下:http://www.imooc.com/api/teacher?type=2&page=1
{ status: 1, data: [ { id: 1, name: "Tony老师聊shell——环境变量配置文件", picSmall: "http://img.mukewang.com/55237dcc0001128c06000338-300-170.jpg", picBig: "http://img.mukewang.com/55237dcc0001128c06000338.jpg", description: "为你带来shell中的环境变量配置文件", learner: 12312 }, { id: 2, name: "数学知识在CSS动画中的应用", picSmall: "http://img.mukewang.com/55249cf30001ae8a06000338-300-170.jpg", picBig: "http://img.mukewang.com/55249cf30001ae8a06000338.jpg", description: "数学知识与CSS结合实现酷炫效果", learner: 45625 }, { id: 3, name: "Oracle数据库开发必备利器之PL/SQL基础", picSmall: "http://img.mukewang.com/5523711700016d1606000338-300-170.jpg", picBig: "http://img.mukewang.com/5523711700016d1606000338.jpg", description: "Oracle数据库高级开发必备的基础。", learner: 41236 }, ], msg: "成功" }
步骤1:定义对应的实体类
//data里面的课程Lesson实体类 public class Lesson { //课程ID private int id; private int learnerNumber; //课程名称 private String name; private String smallPictureUrl; private String bigPictureUrl; //课程描述 private String description; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getLearnerNumber() { return learnerNumber; } public void setLearnerNumber(int learnerNumber) { this.learnerNumber = learnerNumber; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSmallPictureUrl() { return smallPictureUrl; } public void setSmallPictureUrl(String smallPictureUrl) { this.smallPictureUrl = smallPictureUrl; } public String getBigPictureUrl() { return bigPictureUrl; } public void setBigPictureUrl(String bigPictureUrl) { this.bigPictureUrl = bigPictureUrl; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Override public String toString() { return "Lesson{" + "id=" + id + ", learnerNumber=" + learnerNumber + ", name='" + name + '\'' + ", smallPictureUrl='" + smallPictureUrl + '\'' + ", bigPictureUrl='" + bigPictureUrl + '\'' + ", description='" + description + '\'' + '}'; } }
//JSON数据实体类 public class LessonResult { //请求状态 private int status; //data的课程Lesson集合 List<Lesson> lessonsList; public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public List<Lesson> getLessons() { return lessonsList; } public void setLessons(List<Lesson> lessonsList) { this.lessonsList = lessonsList; } @Override public String toString() { return "LessonResult{" + "status=" + status + ", lessonsList=" + lessonsList + '}'; } }
步骤二:解析JSON数据
//处理解析Json数据,将获取到的字符串内容转换为Lesson和LessonResult对象信息 private void handleJSONData(String result) { try { LessonResult lessonResult = new LessonResult(); List<Lesson> lessonList = new ArrayList<Lesson>(); JSONObject jsonObject = new JSONObject(result); int status = jsonObject.getInt("status"); lessonResult.setStatus(status); //得到Json数组 JSONArray jsonArray = jsonObject.getJSONArray("data"); if(jsonArray != null && jsonArray.length() != 0){ //遍历数组 for (int i = 0;i<jsonArray.length();i++){ JSONObject lessonObject = (JSONObject) jsonArray.get(i); int id = lessonObject.getInt("id"); int learner = lessonObject.getInt("learner"); String name = lessonObject.getString("name"); String smallPicture = lessonObject.getString("picSmall"); String bigPicture = lessonObject.getString("picBig"); String description = lessonObject.getString("description"); Lesson lesson = new Lesson(); lesson.setId(id); lesson.setName(name); lesson.setSmallPictureUrl(smallPicture); lesson.setBigPictureUrl(bigPicture); lesson.setDescription(description); lessonList.add(lesson); } lessonResult.setLessons(lessonList); } } catch (JSONException e) { e.printStackTrace(); } }
2.3 使用Gson