从零开始搞懂Android网络请求——JSON数据的解析与Gson框架的使用
来源:互联网 发布:淘宝素材图片 编辑:程序博客网 时间:2024/06/05 10:28
什么是JSON:
- JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
- JSON 是轻量级的文本数据交换格式
- JSON 独立于语言 (单纯的数据格式,不受语言的约束)
JSON 具有自我描述性,更易理解
以上为官方对于Json的解释,其实JSON就是一种JavaScript对象数据表示格式,不受程序语言的限制,以至于成为了目前前后台数据交互的通用数据格式,并逐渐地取代了XML。
本篇博客主要讲解解析JSON数据的方法,包括:
- 原生解析方法:使用了JSON官方的一个Jar包,Android SDK里面已经自带了,所以不需要单独下载。
- GSON框架解析:google 提供的快速json的第三方框架。
JSON原生解析
JSONObject对象解析
首先看一下我们即将解析的数据:
{ "data":{ "title":"How to get JOSN data", "author":"Zergen", "content":"Please follow me" }}
基本原则:
- { }表示JSONObject对象
- [ ]表示JSONArray对象
数据分析:
那么我们如何去解析呢?首先这段数据中,有一个data字段,里面包含了3个关于data的属性信息。
我们首先分析一下,整个数据被{ }包住的,所以整个数据是一个JSONObject对象。
解析步骤:
- 实例化一个JSONObject对象,把获得数据作为参数带进去。
- 使用obj.getXXX方法取得对应的值,例如:getInt,getString,getJSONObject等
public void Jsonpra(){ String Jsondata ="{\"data\":{\"title\":\"How to get JOSN data\",\"author\":\"Zergen\",\"content\":\"Please follow me\"}}"; try { JSONObject obj = new JSONObject(Jsondata); //实例化JSONObject对象,并参入参数:JSON对象数据 JSONObject data = obj.getJSONObject("data"); //data对应的值是一个JSONObject对象 String title = data.getString("title"); String author = data.getString("author"); String content = data.getString("content"); Log.e("TAG", "标题是:" + title + " " + "作者是:" + author + " " + "内容是:" + content); } catch (JSONException e) { e.printStackTrace(); } }
运行结果如下:
E/TAG: 标题是:How to get JOSN data 作者是:Zergen 内容是:Please follow me
JSONArray对象解析
还是先看一下我们即将解析的数据:
{ "data":[ { "title":"How to get JOSN data", "author":"Zergen", "content":"Please follow me" }, { "title":"What is JSON?", "author":"Mark", "content":"JSON just is a kind of data format " } ]}
数据分析:
因为data对应的值用[ ]包住的,所以这个时候data字段对应的值不再是个JSONObject对象了,而是一个JSONArray数组对象了。其实解法与解析JSONObject对象是一个道理,只不过多了一步遍历数组的步骤。
public void JsonArraypra(){ String jsondata = "{\"data\":[{ \"title\":\"How to get JOSN data\",\"author\":\"Zergen\",\"content\":\"Please follow me\"},{\"title\":\"What is JSON?\",\"author\":\"Mark\",\"content\":\"JSON just is a kind of data format \"}]}"; try { JSONObject obj = new JSONObject(jsondata); JSONArray data= obj.getJSONArray("data"); //获取data对应的JsonArray对象 for (int i = 0;i<data.length();i++){ //遍历数组 JSONObject TempObj = data.getJSONObject(i); //参数为索引值 String title = TempObj.getString("title"); Log.e("TAG", "第"+(i+1)+"个标题是:"+title); } } catch (JSONException e) { e.printStackTrace(); } }
运行结果如下:
E/TAG: 第1个标题是:How to get JOSN dataE/TAG: 第2个标题是:What is JSON?
如上我们讲解了如何使用原生的代码来解析JSON数据,但是往往在开发中,这样的效率未免太低了,所以我们常常会用到第三方快捷解析JSON的框架,本篇博客将会介绍GSON框架的简单使用。
GSON框架解析
Gson解析是google 提供的快速Json的第三方框架 。Gson与原生相比最大的优点就在于可以按照bean类对数据进行解析。
要想使用Gson需要自己手动导入jar包,此处不再赘述导入方法了。
Gson解析JSONObject对象
我们还是使用和之前一样的数据,以便于对比两种不同的解析方法:
{ "data":{ "title":"How to get JOSN data", "author":"Zergen", "content":"Please follow me" }}
解析步骤:
- 定义一个实体类,类名随意,但是请注意:类中成员变量名要和json数据中字段完全一致。
实例化Gson对象。调用对象中fromjson方法,根据不同的情况填写参数,详情看下面的解析代码:
首先定义个实体类,名字为Essay
public class Essay { private String title; private String author; private String content; }
这里只是写出了类里面定义的对应json数据里面的成员,还需要写出类的构造函数和对应的set、get方法。
public void gsonpra(){ String Jsondata ="{\"data\":{\"title\":\"How to get JOSN data\",\"author\":\"Zergen\",\"content\":\"Please follow me\"}}"; try { JSONObject obj = new JSONObject(Jsondata); String GsonData = obj.getString("data"); //把data对应的JSONObject对象当做字符串拿出来 Gson gson = new Gson(); Essay e = gson.fromJson(GsonData, Essay.class); //参数一:需要解析的数据(String) 参数二:class<T> 决定函数返回的类型 Log.e("TAG", "GSON解析:"+"标题是:" + e.getTitle() + " " + "作者是:" + e.getAuthor() + " " + "内容是:" + e.getContent()); } catch (JSONException e) { e.printStackTrace(); } }
运行结果如下:
E/TAG: GSON解析:标题是:How to get JOSN data 作者是:Zergen 内容是:Please follow me
关键方法为fromJson,该方法第一个参数为需要解析的json数据,第二个参数为需要解析成的目标对象的class。
Gson解析JSONArray对象
我们还是使用和之前一样的数据:
{ "data":[ { "title":"How to get JOSN data", "author":"Zergen", "content":"Please follow me" }, { "title":"What is JSON?", "author":"Mark", "content":"JSON just is a kind of data format " } ]}
和解析JSONObject对象一样的,首先定义个实体类,名字为Essay
public class Essay { private String title; private String author; private String content; }
需要注意的是,解析JSONArray数组对象所使用的fromjson方法的第二个参数需要是type类型的参数,此参数获取比较麻烦,直接上代码吧:
public void gsonarray(){ String jsondata = "{\"data\":[{ \"title\":\"How to get JOSN data\",\"author\":\"Zergen\",\"content\":\"Please follow me\"},{\"title\":\"What is JSON?\",\"author\":\"Mark\",\"content\":\"JSON just is a kind of data format \"}]}"; try { JSONObject obj = new JSONObject(jsondata); String GsonData = obj.getString("data"); Gson gson = new Gson(); Type type = new TypeToken<ArrayList<Essay>>(){}.getType(); //通过TypeToken中间类来获取Essay的Type ArrayList<Essay> essays = gson.fromJson(GsonData, type); //type决定函数返回值的type for (int i =0;i<essays.size();i++){ Essay e = essays.get(i); Log.e("TAG", "GSON解析数组:" + "第" + (i + 1) + "个标题是:" + e.getTitle()); } } catch (JSONException e) { e.printStackTrace(); } }
运行结果如下:
E/TAG: GSON解析数组:第1个标题是:How to get JOSN dataE/TAG: GSON解析数组:第2个标题是:What is JSON?
如上我们讲解了如何使用Gson框架来解析JSON数据
总结
其实除了Gson还有许多第三方解析JSON数据的框架,比如阿里巴巴的fastJson,以后如果有机会的话,我也会把此框架的使用方法更新在这里
- 从零开始搞懂Android网络请求——JSON数据的解析与Gson框架的使用
- Android--网络请求与json数据解析的使用
- Android Studio配置与使用GSON框架解析json数据
- 从零开始搞懂Android网络请求——HttpURLConnection
- JSON格式数据解析及GSON框架的使用详解
- Android常用Json解析框架GSON和FastJson的使用
- Android中使用Google的GSON框架解析JSON数据----方便快捷(含代码)
- Android网络通讯——JSON,GSON解析网络数据
- Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
- Android:使用Gson解析复杂的JSON数据
- Android中使用Gson解析JSON数据的方法
- Android:使用Gson解析复杂的JSON数据
- [置顶] Android:使用Gson解析复杂的JSON数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- JAVA项目中数据库表的设计思路
- 第三个春天
- 操作系统实验——内存管理
- L1-030. 一帮一
- C语言基础(一)
- 从零开始搞懂Android网络请求——JSON数据的解析与Gson框架的使用
- vc 遍历目录下的文件与总数
- leetcode题解-344. Reverse String && 541. Reverse String II && 345. Reverse Vowels of a String
- NOIP2017翻车记
- javascript匿名函数传值问题
- LinearLayout布局中控件居中显示
- react-native设置scrollView水平垂直居中
- 电商SKU选择优化维度-倒排索引(搜索引擎原理)
- 电蚊拍一天用30-50次?