博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
json-lib 序列化和反序列化
阅读量:6702 次
发布时间:2019-06-25

本文共 3322 字,大约阅读时间需要 11 分钟。

可以使用json-lib来序列化对象

依赖的jar包:

 如何使用json-lib来序列化java对象呢?

实例:

Java代码  
  1. @Test  
  2.     public void test_serialize(){  
  3.         Class2 c=new Class2();  
  4.         List<Student>students=new ArrayList<Student>();  
  5.         Student student=new Student();  
  6.         Map<String, Object> attribute =new HashMap<String, Object>();  
  7.         attribute.put("p1""v1");  
  8.         attribute.put("p2""v2");  
  9.         student.setAttribute(attribute);  
  10.         students.add(student);  
  11.         c.setStudents(students);  
  12.         c.setClassName("计算机0705");  
  13.         JSONObject js = JSONObject.fromObject(c/*, jsonConfig*/);  
  14.         System.out.println(js.toString());  
  15.     }  

 运行结果如下:

 

{"classAttribute":null,"className":"计算机0705","count":0,"students":[{"addrr":null,"age":0,"attribute":{"p2":"v2","p1":"v1"},"hobby":"","name":""}]}

 

 

实例:

Java代码  
  1. @Test  
  2.     public void test_serialize2(){  
  3.         Class2 c=new Class2();  
  4.         List<Student>students=new ArrayList<Student>();  
  5.         Student student=new Student();  
  6.         Map<String, Object> attribute =new HashMap<String, Object>();  
  7.         attribute.put("p1""v1");  
  8.         attribute.put("p2""v2");  
  9.         student.setAttribute(attribute);  
  10.         students.add(student);  
  11.         c.setStudents(students);  
  12.         c.setClassName("计算机0705");  
  13.           
  14.         Map<String, Object> classAttribute =new HashMap<String, Object>();  
  15.         classAttribute.put("pp1""vv1");  
  16.         classAttribute.put("pp2""vv2");  
  17.           
  18.           
  19.         Teacher t=new Teacher();  
  20.         t.setName("熊应标");  
  21.         t.setTitle("语文老师");  
  22.           
  23.         c.setClassAttribute(classAttribute);  
  24. //      One2One one=new One2One();  
  25. //      one.setC(c);  
  26. //      one.setT(t);  
  27.           
  28.         JSONObject js = JSONObject.fromObject(c/*, jsonConfig*/);  
  29.         System.out.println(js.toString());  
  30.     }  

 运行结果如下:

 

{"classAttribute":{"pp1":"vv1","pp2":"vv2"},"className":"计算机0705","count":0,"students":[{"addrr":null,"age":0,"attribute":{"p2":"v2","p1":"v1"},"hobby":"","name":""}]}

 

如何使用json-lib反序列化(把string转化为Java对象)?

参考:http://hw1287789687.iteye.com/admin/blogs/1993048

实例:

Java代码  
  1. @Test  
  2.     public  void test_reserialize(){  
  3. //      String jsonInput="{\"className\":\"计算机0705\",\"count\":0,\"students\":[{\"addrr\":null,\"age\":0,\"hobby\":\"\",\"name\":\"\"}]}";  
  4.         String jsonInput="{\"classAttribute\":{\"pp1\":\"vv1\",\"pp2\":\"vv2\"},\"className\":\"计算机0705\",\"count\":0,\"students\":[{\"addrr\":null,\"age\":0,\"attribute\":{\"p2\":\"v2\",\"p1\":\"v1\"},\"hobby\":\"\",\"name\":\"\"}]}";  
  5.         JSONObject js = JSONObject.fromObject(jsonInput);  
  6.           
  7.         JsonConfig jsonConfig = new JsonConfig();  
  8.   
  9.         jsonConfig.setRootClass(Class2.class);  
  10.         Map<String, Class> classMap = new HashMap<String, Class>();  
  11.         classMap.put("students", Student.class); // 指定JsonRpcRequest的request字段的内部类型  
  12.         jsonConfig.setClassMap(classMap);  
  13.           
  14.           
  15.           
  16.         Class2 one = (Class2) JSONObject.toBean(js, jsonConfig/*java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to*/);  
  17.         System.out.println(one.getClassName());  
  18.         Map<String, Object> attribute =one.getStudents().get(0).getAttribute();  
  19.         System.out.println(attribute);  
  20.           
  21.     }  

 运行结果:

计算机0705

{p2=v2, p1=v1}

 

序列化时如何删除属性值为null的属性

参考:

 

下面的事不合要求的:

{"addrr":{"country":"中国","state":"湖北省","street":"清河"},"age":25,"hobby":"","name":"黄威"}

hobby的值为空,应该被过滤掉的。

解决方法:

 

JsonConfig jsonConfig = new JsonConfig();

       jsonConfig.setJsonPropertyFilter(new PropertyFilter() {

           publicboolean apply(Object source, String name, Object value) {

              // System.out.println(name);

              // System.out.println(value);

              if (value == null || (value instanceof String)

                     && ((String) value).equals("")) {

                  returntrue;

              }

              returnfalse;

           }

       });

       JSONObject js = JSONObject.fromObject(student, jsonConfig);

 

 参考:http://hw1287789687.iteye.com/blog/1997956

转载地址:http://ejzlo.baihongyu.com/

你可能感兴趣的文章
Android 6.0 特性
查看>>
shell 脚本作业
查看>>
程序员老司机都要错的 Python 陷阱与缺陷列表
查看>>
《netty入门与实战》笔记-06:心跳与空闲检测
查看>>
使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台...
查看>>
SSM整合框架
查看>>
【安全牛学习笔记】CONTROL FRAME
查看>>
信号量 互斥锁 条件变量的区别(讲的很好,值得收藏)
查看>>
Linux学习笔记十二周四次课(4月26日)
查看>>
Linux之用户管理
查看>>
写一个shell脚本,把192.168.0.0/24网段在线的ip列出来。 思路: for循环, 0
查看>>
JDK安装与环境变量配置
查看>>
多字符与宽字符相互之间的转换
查看>>
CentOS 7.3 mini 解压安装二进制 mariadb 10.2.10
查看>>
RAD Studio增书签功能 单一窗口就可检视受标记
查看>>
硬盘基本知识(一)
查看>>
Python故事——three(附)
查看>>
ACL
查看>>
Kubernetes 通过statefulset部署redis cluster集群
查看>>
Mac安装Thrift
查看>>