• 支持注解、支持全类型序列化
- 基本用法:
• 定义实体类
• 根据需要可以将JSON 生成单个实体或列表实体集合
- 代码演示:
使用 FastJson 解析 JsonObject
使用 FastJson 解析 JsonArray
使用 FastJson 将实体转为JSON 数据
二、实例解析
1. Gson的基本用法
Gson有两个重要的方法,一个是 tojson()
,另一个是 fromjson()
。
tojson()
:将bean里面的内容转换为json内容。
User user=new User(“zhangsan”,19);
Gson gson=new Gson();
System.out.println(gson.toJson(user));
//打印结果是{“name”:“zhangsan”,“age”:19}
当然它还可以承担一些复杂的操作,比如通过集合插入一组数据。
List list = new LinkedList();
User u1 =new User(“zhangsan”,19);
list.add(u1);
User u2=new User(“lisi”,25);
list.add(u2);
Gson gson = new Gson();
System.out.println(gson.toJson(list));
//打印结果是[{“name”:“zhangsan”,“age”:19},{“name”:“lisi”,“age”:25}]
//注意,对于Json而言,[]代表数组,{}代表一个对象
当然它还可以实现更复杂的对象,比如在一个Json对象中再嵌套一个Json对象。
fromjson()
:从我们的Json对象封装出一个一个的bean对象。
User u = new User();
Gson gson = new Gson();
u = gson.fromJson(“{name:‘zhangsan’,age:12}”, user.class);
System.out.println(u.getName()+" "+u.getAge());
//打印结果是zhangsan 12
如果你的Json里面不止一个对象,那么你就得使用一个集合来装.
我们这里模拟一个list来装的例子,在使用list装的过程中我们会使用到一个工具类 TypeToken
.
通过它我们可以 获取一个泛型的数据类型,使用方法十分简单,TypeToken<泛型>(){}.gettype()
即可,返回一个Type
类型,这就是fromjson()
所需要的type类型,来自于reflect包
。
User user = new User();
Gson gson = new Gson();
String str = “[{name:‘zhangsan’,age:12},{name:‘lisi’,age:13}]”;
// 获取一个泛型的数据类型
Type type = new TypeToken<List>(){}.getType();
List list = gson.fromJson(str , type);
for(user u : list){
System.out.println(u.getName() + " " + u.getAge());
}
//打印结果是zhangsan 12
//lisi 13
2. Gson的实例解析
下面这段 json 代码(时间不一样获得的代码可能不一样)是豆瓣书籍的一个 api :
https://api.douban.com/v2/book/1220562
{
“rating”: {
“max”: 10,
“numRaters”: 345,
“average”: “7.0”,
“min”: 0
},
“subtitle”: “”,
“author”: [
“[日] 片山恭一”
],
“pubdate”: “2005-1”,
“tags”: [
{
“count”: 133,
“name”: “片山恭一”,
“title”: “片山恭一”
},
{
“count”: 62,
“name”: “日本”,
“title”: “日本”
},
{
“count”: 60,
“name”: “日本文学”,
“title”: “日本文学”
},
{
“count”: 38,
“name”: “小说”,
“title”: “小说”
},
{
“count”: 32,
“name”: “满月之夜白鲸现”,
“title”: “满月之夜白鲸现”
},
{
“count”: 15,
“name”: “爱情”,
“title”: “爱情”
},
{
“count”: 8,
“name”: “純愛”,
“title”: “純愛”
},
{
“count”: 8,
“name”: “外国文学”,
“title”: “外国文学”
}
],
“origin_title”: “”,
“image”: “https://img1.doubanio.com/mpic/s1747553.jpg”,
“binding”: “平装”,
“translator”: [
“豫人”
],
“catalog”: "
",
“pages”: “180”,
“images”: {
“small”: “https://img1.doubanio.com/spic/s1747553.jpg”,
“large”: “https://img1.doubanio.com/lpic/s1747553.jpg”,
“medium”: “https://img1.doubanio.com/mpic/s1747553.jpg”
},
“alt”: “http://book.douban.com/subject/1220562/”,
“id”: “1220562”,
“publisher”: “青岛出版社”,
“isbn10”: “7543632608”,
“isbn13”: “9787543632608”,
“title”: “满月之夜白鲸现”,
“url”: “http://api.douban.com/v2/book/1220562”,
“alt_title”: “”,
“author_intro”: “”,
“summary”: “那一年,是听莫扎特、钓鲈鱼和家庭破裂的一年。说到家庭破裂,母亲怪自己当初没有找到好男人,父亲则认为当时是被狐狸精迷住了眼,失常的是母亲,但出问题的是父亲……。”,
“price”: “15.00元”
}
下面我们在Android进行解析。
Project中总共有三个类:MainActivity.java
, Book.java
, Tag.java
public class MainActivity extends Activity {
private String url = “https://api.douban.com/v2/book/1220562”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getData();
}
private void getData() {
StringRequest request = new StringRequest(url, new Listener() {
@Override
public void onResponse(String arg0) {
Log.i(“info”, arg0);
dealData(arg0);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
// TODO Auto-generated method stub
}
});
// 将请求加入队列
new Volley().newRequestQueue(getApplicationContext()).add(request);
}
private void dealData(String result) {
Gson gson = new Gson();
Book book = gson.fromJson(result, Book.class);
Log.i(“info”, book.getTitle() + “:” + book.getPublisher() + “:”
- book.getTags().size()); // 这里打印了tags的个数
}
}
// Log日志结果是 满月之夜白鲸现:青岛出版社:8
// 对象的变量名要与json中的相对应,这里只是选取了json中的几个“变量”进行解析
public class Book {
private String title;
private String publisher;
private String summary;
private ArrayList tags;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public ArrayList getTags() {
return tags;
}
public void setTags(ArrayList tags) {
this.tags = tags;
}
}
public class Tag {
private String count;
private String name;
private String title;
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
3. FastJson的基本用法
1) Fastjson中的经常调用的方法
// 把JSON文本parse为JSONObject或者JSONArray
public static final Object parse(String text);
// 把JSON文本parse成JSONObject
public static final JSONObject parseObject(String text);
// 把JSON文本parse为JavaBean
public static final T parseObject(String text, Class clazz);
// 把JSON文本parse成JSONArray
public static final JSONArray parseArray(String text);
//把JSON文本parse成JavaBean集合
public static final List parseArray(String text, Class clazz);
// 将JavaBean序列化为JSON文本
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
愿你有一天,真爱自己,善待自己。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
减轻大家的负担。**
[外链图片转存中…(img-AtuIrqbT-1712506473532)]
[外链图片转存中…(img-ZYwFXw5j-1712506473532)]
[外链图片转存中…(img-5TAHOKD6-1712506473533)]
[外链图片转存中…(img-iegBOUe4-1712506473533)]
[外链图片转存中…(img-mKvHRdzF-1712506473534)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
愿你有一天,真爱自己,善待自己。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!