zoukankan      html  css  js  c++  java
  • 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 你是风儿
    

      

  • 相关阅读:
    Educational Codeforces Round 1 (C) (atan2 + long double | 大数)
    AC自动机模板
    JSP 过滤器
    JSP 动作元素
    Hibernate 拦截器
    Hibernate 批处理
    Hibernate 缓存
    单例模式数据库连接
    JavaScript限制前端页面用户表单输入
    注册页面手机验证码无跳转接收[html+js+ajax+php]
  • 原文地址:https://www.cnblogs.com/leigepython/p/10133006.html
Copyright © 2011-2022 走看看