jackson-java对象的json序列化,非常蠢的经历(另附json正反序列化小demo+单例模式)
2018-01-01 18:45
633 查看
日常
总算是把版本2.0写完了,晚上通一通接口,看看还有哪些小bug。今天说说我下午发现的关于java对象的json序列号的一个问题,大概就是在使用jackson的包序列化对象的时候,有两个我后来添加的成员怎么也无法被序列化!总是缺少那两个属性!
问题原因
丝毫没有办法的我,查了一通资料,竟然发现没有和我类似经历的人!只好自己找问题所在了……其实实际问题是:我要序列化的那个对象,因为我新增了属性,而新增的属性我没有写getter,所以private是无法被jackson的包访问到的!
解决
写了getter之后,问题顺利解决附:jackson包使用小demo+单例模式
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; public class JacksonDemo { //私有静态实例,赋值为空,延迟加载 private static ObjectMapper objectMapper=null; //私有构造,防止实例化 private JacksonDemo(){} //静态方法创建单个实例 public static ObjectMapper getObjectMapper(){ if(objectMapper==null){ objectMapper=new ObjectMapper(); } return objectMapper; } private static String toJson(Object object) throws JsonProcessingException { //java对象序列化为Json字符串 return getObjectMapper().writeValueAsString(object); } private static <T> T fromJson(String json,Class<T> type) throws IOException { //将Json字符串反序列化为java对象 return getObjectMapper().readValue(json,type); } public static void main(String[] args) { //status是一个有三个私有属性的类,分别是String status,String msg,Object data; Status status=new Status(); status.setData("abc"); try { //将status输出为json字符串 System.out.println(toJson(status)); //将json字符串转换为Status对象 String json="{\"status\":\"success\",\"msg\":\"seller goods found successfully!\",\"data\":[{\"id\":\"014352373888\",\"name\":\"%E4%BC%91%E9%97%B2%E5%A8%B1%E4%B9%90+%E6%91%84%E5%BD%B1%E4%B9%8B%E5%9C%B0\",\"price\":128.0,\"city\":null,\"route\":null,\"pictures\":[\"/img/goods/014352373888/1.png\"],\"description\":null,\"comment\":null,\"seller\":{\"headPicture\":\"/img/headPic.png\",\"phoneNumber\":\"11111111111\",\"sex\":null,\"name\":\"testuser\"},\"pubtime\":\"1514523738880\"}]}"; Status s=fromJson(json,Status.class); System.out.println(s.getStatus()); } catch (IOException e) { e.printStackTrace(); } } }
总结
结果如图,emmmmmm。这里可以看到转换成json字符串就比较单一
转换成java对象,仔细看小框:对于我给出的class文件,它会正确的实例化这个类,而我类里的Object对象由于没有特定的类,所以默认键值对是使用的LinkedHashMap,而键值对之间的数组使用的是ArrayList
PS:2018年快乐!
关于Jackson注解的内容参考大佬的文章 Jackson常用注解介绍
相关文章推荐
- jackson2.8.4java对象序列化成json字符串格式化时间
- JAVA对象jackson序列化json属性名变成小写的解决方案
- JAVA对象jackson序列化json属性名首字母变成小写的解决方案
- json-lib和jackson进行Java对象到json字符串序列化性能比较
- json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化[转]
- Java对象的序列化与反序列化:默认格式及JSON格式(使用jackson)
- JAVA对象jackson序列化json属性名首字母变成小写的解决方案
- Java对象Json序列化—Jackson框架
- JAVA对象jackson序列化json属性名变成小写的解决方案
- Java下利用Jackson进行JSON解析和序列化
- 使用jacksonjava对象转换成标准的json格式,便于与easyui...
- Jackson序列化Java对象时注意
- Java利用Jackson转换json和java对象
- java对象和json数据转换实现方式3-使用jackson实现
- jackson-java对象<-->json
- Java下利用Jackson进行JSON解析和序列化
- Java 对象序列化为Json 或XML
- 使用 Jackson 把 Java 对象转换成 JSON 字串
- Java下利用Jackson进行JSON解析和序列化示例
- Jackson转换对象为json的时候报java.lang.stackoverflowerror