fastjson处理json
返回主页 你是风儿
博客园首页新随笔联系订阅管理
随笔 - 29 文章 - 0 评论 - 23
FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。 JSONObject:fastJson提供的json对象。 JSONArray:fastJson提供json数组对象。 我们可以把JSONObject当成一个Map<String,Object>来看,只是JSONObject提供了更为丰富便捷的方法,方便我们对于对象属性的操作。我们看一下源码。 同样我们可以把JSONArray当做一个List<Object>,可以把JSONArray看成JSONObject对象的一个集合。 此外,由于JSONObject和JSONArray继承了JSON,所以说也可以直接使用两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆我们还是使用JSON。 首先定义三个json格式的字符串,作为我们的数据源。 复制代码
//json字符串-简单对象型
private static final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}";
//json字符串-数组类型
private static final String JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
//复杂格式json字符串
private static final String COMPLEX_JSON_STR = "{\"teacherName\":\"crystall\",\"teacherAge\":27,\"course\":{\"courseName\":\"english\",\"code\":1270},\"students\":[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]}";
复制代码 示例1:JSON格式字符串与JSON对象之间的转换。 示例1.1-json字符串-简单对象型与JSONObject之间的转换 复制代码
/**
* json字符串-简单对象型与JSONObject之间的转换
*/
public static void testJSONStrToJSONObject(){ JSONObject jsonObject = JSON.parseObject(JSON_OBJ_STR);
//JSONObject jsonObject1 = JSONObject.parseObject(JSON_OBJ_STR); //因为JSONObject继承了JSON,所以这样也是可以的 System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge")); }
复制代码 示例1.2-json字符串-数组类型与JSONArray之间的转换 复制代码
/**
* json字符串-数组类型与JSONArray之间的转换
*/
public static void testJSONStrToJSONArray(){ JSONArray jsonArray = JSON.parseArray(JSON_ARRAY_STR);
//JSONArray jsonArray1 = JSONArray.parseArray(JSON_ARRAY_STR);//因为JSONArray继承了JSON,所以这样也是可以的 //遍历方式1
int size = jsonArray.size();
for (int i = 0; i < size; i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge"));
} //遍历方式2
for (Object obj : jsonArray) {
JSONObject jsonObject = (JSONObject) obj;
System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge"));
}
}
复制代码 示例1.3-复杂json格式字符串与JSONObject之间的转换 复制代码
/**
* 复杂json格式字符串与JSONObject之间的转换
*/
public static void testComplexJSONStrToJSONObject(){ JSONObject jsonObject = JSON.parseObject(COMPLEX_JSON_STR);
//JSONObject jsonObject1 = JSONObject.parseObject(COMPLEX_JSON_STR);//因为JSONObject继承了JSON,所以这样也是可以的 String teacherName = jsonObject.getString("teacherName");
Integer teacherAge = jsonObject.getInteger("teacherAge");
JSONObject course = jsonObject.getJSONObject("course");
JSONArray students = jsonObject.getJSONArray("students"); }
复制代码 示例2:JSON格式字符串与javaBean之间的转换。 首先,我们针对数据源所示的字符串,提供三个javaBean。 复制代码
public class Student { private String studentName;
private Integer studentAge; public String getStudentName() {
return studentName;
} public void setStudentName(String studentName) {
this.studentName = studentName;
} public Integer getStudentAge() {
return studentAge;
} public void setStudentAge(Integer studentAge) {
this.studentAge = studentAge;
}
}
复制代码
复制代码
public class Course { private String courseName;
private Integer code; public String getCourseName() {
return courseName;
} public void setCourseName(String courseName) {
this.courseName = courseName;
} public Integer getCode() {
return code;
} public void setCode(Integer code) {
this.code = code;
}
}
复制代码
复制代码
public class Teacher { private String teacherName;
private Integer teacherAge;
private Course course;
private List<Student> students; public String getTeacherName() {
return teacherName;
} public void setTeacherName(String teacherName) {
this.teacherName = teacherName;
} public Integer getTeacherAge() {
return teacherAge;
} public void setTeacherAge(Integer teacherAge) {
this.teacherAge = teacherAge;
} public Course getCourse() {
return course;
} public void setCourse(Course course) {
this.course = course;
} public List<Student> getStudents() {
return students;
} public void setStudents(List<Student> students) {
this.students = students;
}
}
复制代码
json字符串与javaBean之间的转换推荐使用 TypeReference<T> 这个类,使用泛型可以更加清晰,当然也有其它的转换方式,这里就不做探讨了。 示例2.1-json字符串-简单对象型与javaBean之间的转换 复制代码
/**
* json字符串-简单对象与JavaBean_obj之间的转换
*/
public static void testJSONStrToJavaBeanObj(){ Student student = JSON.parseObject(JSON_OBJ_STR, new TypeReference<Student>() {});
//Student student1 = JSONObject.parseObject(JSON_OBJ_STR, new TypeReference<Student>() {});//因为JSONObject继承了JSON,所以这样也是可以的 System.out.println(student.getStudentName()+":"+student.getStudentAge()); }
复制代码
示例2.2-json字符串-数组类型与javaBean之间的转换 复制代码
/**
* json字符串-数组类型与JavaBean_List之间的转换
*/
public static void testJSONStrToJavaBeanList(){ ArrayList<Student> students = JSON.parseObject(JSON_ARRAY_STR, new TypeReference<ArrayList<Student>>() {});
//ArrayList<Student> students1 = JSONArray.parseObject(JSON_ARRAY_STR, new TypeReference<ArrayList<Student>>() {});//因为JSONArray继承了JSON,所以这样也是可以的 for (Student student : students) {
System.out.println(student.getStudentName()+":"+student.getStudentAge());
}
}
复制代码
示例2.3-复杂json格式字符串与与javaBean之间的转换 复制代码
/**
* 复杂json格式字符串与JavaBean_obj之间的转换
*/
public static void testComplexJSONStrToJavaBean(){ Teacher teacher = JSON.parseObject(COMPLEX_JSON_STR, new TypeReference<Teacher>() {});
//Teacher teacher1 = JSON.parseObject(COMPLEX_JSON_STR, new TypeReference<Teacher>() {});//因为JSONObject继承了JSON,所以这样也是可以的
String teacherName = teacher.getTeacherName();
Integer teacherAge = teacher.getTeacherAge();
Course course = teacher.getCourse();
List<Student> students = teacher.getStudents();
}
复制代码
对于TypeReference<T>,由于其构造方法使用 protected 进行修饰,所以在其他包下创建其对象的时候,要用其实现类的子类:new TypeReference<Teacher>() {} 此外的: 1,对于JSON对象与JSON格式字符串的转换可以直接用 toJSONString()这个方法。 2,javaBean与JSON格式字符串之间的转换要用到:JSON.toJSONString(obj); 3,javaBean与json对象间的转换使用:JSON.toJSON(obj),然后使用强制类型转换,JSONObject或者JSONArray。 最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。 分类: JSON
好文要顶 关注我 收藏该文
你是风儿
关注 - 2
粉丝 - 54
+加关注
17 0
« 上一篇:快速排序算法
» 下一篇:mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)
posted @ 2017-07-02 14:42 你是风儿 阅读(192815) 评论(10) 编辑 收藏 评论列表
回复引用 #1楼 2017-11-18 14:59 esileme
可以可以,很不错~
支持(0)反对(0)
回复引用 #2楼 2017-12-18 13:58 回眸一下
nice啊
支持(0)反对(0)
回复引用 #3楼[楼主] 2017-12-19 20:21 你是风儿
@ 回眸一下
多谢
支持(0)反对(0)
回复引用 #4楼[楼主] 2017-12-19 20:22 你是风儿
@ esileme
多多指教
支持(0)反对(0)
回复引用 #5楼 2018-05-29 16:37 山中小楼夜听雨
多谢楼主
支持(0)反对(0)
回复引用 #6楼 2018-08-15 09:10 云中鵟
很赞同楼主结尾的话!
支持(0)反对(0)
回复引用 #7楼 2018-10-30 10:37 于宝柱
好全
支持(0)反对(0)
回复引用 #8楼 2018-11-28 10:16 稻香今天更新文章了吗
感谢大佬, 很强大
支持(0)反对(0)
回复引用 #9楼 2018-12-07 12:09 wizard_Q
没有嵌套的方法吗
支持(0)反对(0)
回复引用 #10楼 2018-12-10 15:22 flyduan
深度好文,详细明了.点个赞!
支持(0)反对(0)
刷新评论刷新页面返回顶部
发表评论
昵称:
王星辰宇 评论内容:引用 粗体 链接 缩进 代码 图片 退出 订阅评论 [Ctrl+Enter快捷键提交] 【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库!
【活动】华为云12.12会员节全场1折起 满额送Mate20
【活动】华为云会员节云服务特惠1折起
【推荐】服务器100%基准CPU性能,1核1G首年168元,限时特惠!
腾讯云1129 最新新闻:
· 子弹都打不碎的玻璃,为何用手轻轻一碰就碎了?
· TARS斩获2018年最佳原创开源软件奖
· 新西兰火箭创企发射成功,将13颗微型卫星送入轨道
· 途歌回应“退押金难”:退款需20+7个工作日 将缩短周期
· 嘲笑那块屏幕的人,根本不懂中国的穷孩子需要什么
» 更多新闻...
昵称:你是风儿
园龄:2年3个月
粉丝:54
关注:2
+加关注
< 2018年12月 >
日 一 二 三 四 五 六
25 26 27 28 29 30 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
搜索 常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
我的标签
BeanUtils(1)
HttpServletRequest(1)
随笔分类
Ajax(4)
JSON(6)
mysql(5)
spring(9)
多线程(1)
其它(2)
前端技术(1)
数据结构和算法(1)
随笔档案
2018年4月 (1)
2017年12月 (1)
2017年7月 (1)
2017年4月 (1)
2017年3月 (5)
2017年2月 (15)
2017年1月 (5)
最新评论
1. Re:FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
深度好文,详细明了.点个赞!
--flyduan
2. Re:FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
没有嵌套的方法吗
--wizard_Q
3. Re:FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
感谢大佬, 很强大
--稻香今天更新文章了吗
4. Re:mysql(1)—— 详解一条sql语句的执行过程
看完第一段,个人感觉把DBMS比喻成“java中接口的实现类”更贴切一些
--夜蓝沙
5. Re:mysql(4)—— 表连接查询与where后使用子查询的性能分析。
我跟楼主有些相似,不过我是有个小毛病,就是我写的代码必须完全在我的掌控之内,每一个环节怎么运行的,流程怎么走的,我必须全部知道,否则我就不会继续写,直到我弄明白为止。不过我比楼主幸运,我们公司项目开发......
--夜蓝沙
阅读排行榜
1. FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换(192800)
2. 详解Ajax请求(四)——多个异步请求的执行顺序(21983)
3. JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换(18465)
4. 详解get请求和post请求参数中文乱码的解决办法(17131)
5. 使用getParameterMap()方法实现对请求参数的封装的工具类(10888)
评论排行榜
1. FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换(10)
2. mysql(1)—— 详解一条sql语句的执行过程(7)
3. mysql(4)—— 表连接查询与where后使用子查询的性能分析。(4)
4. 使用getParameterMap()方法实现对请求参数的封装的工具类(1)
5. 详解Ajax请求(四)——多个异步请求的执行顺序(1)
推荐排行榜
1. FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换(17)
2. mysql(4)—— 表连接查询与where后使用子查询的性能分析。(4)
3. mysql(2)—— 由笛卡尔积现象分析数据库表的连接(3)
4. 详解Ajax请求(四)——多个异步请求的执行顺序(3)
5. 快速排序算法(2)
Copyright ©2018 你是风儿
fastjson处理json的更多相关文章
- FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换. JSONObject:fas ...
- fastjson转换json字符串key的首字母小写变大写的解决办法
https://blog.csdn.net/erbao_2014/article/details/53688934 问题描述在开发过程中,由于接口文档的描述,要求json字符串的key首字母为大写,而 ...
- fastjson生成JSON字符串的时候出现$ref
fastjson生成JSON字符串的时候出现$ref 转载自:http://wuzhuti.cn/201426!826!05!130202.html 可以通过选项 DisableCircularRef ...
- Spring Boot返回json数据及完美使用FastJson解析Json数据
Spring Boot返回json数据 视频地址:http://www.iqiyi.com/w_19rubxzsr5.html 博文参考:https://blog.csdn.net/linxingl ...
- springboot使用fastJson作为json解析框架
springboot使用fastJson作为json解析框架 springboot默认自带json解析框架,默认使用jackson,如果使用fastjson,可以按照下列方式配置使用 〇.搭建spri ...
- 使用Fastjson生成Json字符串少字段属性(数据丢失)
最后是控制台打印生成的结果如下:FastJson生成字符串是:{"id":"2","name":"节点1"," ...
- fastjson对json操作
fastjson对json字符串JSONObject和JSONArray互相转换操作示例 fastjson的方法: Fastjson API入口类是com.alibaba.fastjson.JSON ...
- fastjson解析json数组
1.fastjson解析json数组(直接上代码) import java.util.ArrayList; import java.util.List; import com.alibaba.fast ...
- FastJson生成json时,显示Null属性
FastJson生成json时,默认不会输出null字段. 移动端,有时候,需要后端提供完整的字段说明. Map < String , Object > jsonMap = new Has ...
随机推荐
- JQuery的异步回调支持 - Promise、Deferred
1.Deferred对象: 一般在函数内部进行声明,并在运行过程中改变其状态,例如成功或失败,最终返回Promise对象用于状态监听. 主要方法: Deferred.resolve(param...) ...
- Linux学习总结(六)-su命令 sudo 命令 限制root远程登录
root 用户拥有至高无上的权利,那么我们运维人员是不是直接在root用户下处理所有问题呢? 答案是否定的,权力越大,责任越大,人是会犯错的,因此我们要在不影响我们的工作情况下,尽量限制我们的权力,以 ...
- JDBC(2)Statement
Statement: 用于执行SQL语句的对象 通过Connection的createStatement()方法得到一个Statement对象 只有在获得了Statement对象之后才能执行SQL对象 ...
- 调用save()方法,页面显示保存成功,但是数据库中没有值的原因
在DAO层调用save()方法,页面上显示成功,但是在数据库中查找时发现数据没有保存到数据库中的原因可能是: 1.Service层中是否在调用DAO层中的save()方法之前添加注解@Transact ...
- 实例:接口并发限流RateLimiter
需求:接口每秒最多只能相应1个请求 1.创建 全局类对象 import com.google.common.util.concurrent.RateLimiter; import org.spring ...
- 课时8.HTML作用(掌握)
什么是HTML? HTML其实是HyperText Markup Language的缩写,超文本标记语言 如何重命名文件? 点击右键重命名 点击F2 首先利用记事本保存了一个标题和两段描述,然后修改纯 ...
- [HTML]在页面中输出空格的几种方式
JS中如何输出空格 在写JS代码的时候,大家可以会发现这样现象: document.write(" 1 2 3 "); 结果: 1 2 ...
- Oracle子查询之简单子查询
Oracle 简单子查询 顾名思义,简单子查询是嵌套在 SQL 语句中的另一个SELECT 语句,并且子查询只返回一列数据 1,单行子查询: 子查询 (内查询) 在主查询之前一次执行完成.子查询的结果 ...
- lead over 和 lag over
今天在熟悉项目的某个功能模块时,查看mybatis的映射文件内发现这样的一串sql: (T.NET_VALUE - LEAD(T.NET_VALUE)OVER(ORDER BY T.ESTIMATE_ ...
- 基于MySql和Sails.js的RESTful风格的api实现
Sails.js是类似于express的node后台框架,她面向数据库的特性使得面向数据库的服务器的搭建变得特别简单快捷. 现在网上关于Sails的教程大多是基于V0.12版本的,但是现在Sails的 ...