- 浏览: 7935241 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
对于一直用gson的人来说,如果单独用jackson,真是麻烦了,但还是得小结下了:
先来看下如何自定义把某个对象序列化为json:
先是对象:
JACKSON一般的使用很容易,如;
Item myItem = new Item(1, "theItem", new User(2, "theUser"));
String serialized = new ObjectMapper().writeValueAsString(myItem);
结果为:
{
"id": 1,
"itemName": "theItem",
"owner": {
"id": 2,
"name": "theUser"
}
}
如果要输出为如下的样子,比如;
{
"id": 25,
"itemName": "FEDUfRgS",
"owner": 15
}
则要自定义了,要继承JsonSerializer类,如下:
然后
看,相当复杂,然后看有无办法简单点,其实是有的哦;方法为:
就是使用注解@JsonSerialize,然后:
接下来看如何反序列化了,
同样,要反序列化的两个pojo为:
反序列化代码为:
Item itemWithOwner = new ObjectMapper().readValue(json, Item.class);
如果要自定义反序列化,比如要反序列化的JSON为;
{
"id": 1,
"itemName": "theItem",
"owner": 2
}
则上面这样会报错:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
Unrecognized field "createdBy" (class org.baeldung.jackson.dtos.Item),
not marked as ignorable (3 known properties: "id", "owner", "itemName"])
at [Source: java.io.StringReader@53c7a917; line: 1, column: 43]
(through reference chain: org.baeldung.jackson.dtos.Item["createdBy"])
代码:
也可以用注解:
@JsonDeserialize(using = ItemDeserializer.class)
public class Item {
...
}
可以的,参考:http://jackyrong.iteye.com/blog/1936581
刚开始看,看不出两者的关系。。。。。
先来看下如何自定义把某个对象序列化为json:
先是对象:
public class User { public int id; public String name; } public class Item { public int id; public String itemName; public User owner; }
JACKSON一般的使用很容易,如;
Item myItem = new Item(1, "theItem", new User(2, "theUser"));
String serialized = new ObjectMapper().writeValueAsString(myItem);
结果为:
{
"id": 1,
"itemName": "theItem",
"owner": {
"id": 2,
"name": "theUser"
}
}
如果要输出为如下的样子,比如;
{
"id": 25,
"itemName": "FEDUfRgS",
"owner": 15
}
则要自定义了,要继承JsonSerializer类,如下:
public class ItemSerializer extends JsonSerializer<Item> { @Override public void serialize(Item value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartObject(); jgen.writeNumberField("id", value.id); jgen.writeStringField("itemName", value.itemName); jgen.writeNumberField("owner", value.owner.id); jgen.writeEndObject(); } }
然后
Item myItem = new Item(1, "theItem", new User(2, "theUser")); ObjectMapper mapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addSerializer(Item.class, new ItemSerializer()); mapper.registerModule(module); String serialized = mapper.writeValueAsString(myItem);
看,相当复杂,然后看有无办法简单点,其实是有的哦;方法为:
@JsonSerialize(using = ItemSerializer.class) public class Item { ... }
就是使用注解@JsonSerialize,然后:
Item myItem = new Item(1, "theItem", new User(2, "theUser")); String serialized = new ObjectMapper().writeValueAsString(myItem);
接下来看如何反序列化了,
同样,要反序列化的两个pojo为:
public class User { public int id; public String name; } public class Item { public int id; public String itemName; public User owner; }
反序列化代码为:
Item itemWithOwner = new ObjectMapper().readValue(json, Item.class);
如果要自定义反序列化,比如要反序列化的JSON为;
{
"id": 1,
"itemName": "theItem",
"owner": 2
}
则上面这样会报错:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
Unrecognized field "createdBy" (class org.baeldung.jackson.dtos.Item),
not marked as ignorable (3 known properties: "id", "owner", "itemName"])
at [Source: java.io.StringReader@53c7a917; line: 1, column: 43]
(through reference chain: org.baeldung.jackson.dtos.Item["createdBy"])
代码:
public class ItemDeserializer extends JsonDeserializer<Item> { @Override public Item deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { JsonNode node = jp.getCodec().readTree(jp); int id = (Integer) ((IntNode) node.get("id")).numberValue(); String itemName = node.get("itemName").asText(); int userId = (Integer) ((IntNode) node.get("id")).numberValue(); return new Item(id, itemName, new User(userId, null)); } } ObjectMapper mapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addDeserializer(Item.class, new ItemDeserializer()); mapper.registerModule(module); Item readValue = mapper.readValue(json, Item.class);
也可以用注解:
@JsonDeserialize(using = ItemDeserializer.class)
public class Item {
...
}
评论
5 楼
907121461
2014-08-08
我的 jackson jar 怎么没有registerModule这个方法呢
4 楼
liuweihug
2014-08-01
json序列化反序列化插件-json2.js 介绍和使用
http://www.suchso.com/UIweb/json2-js-stringify-parse-serializable-deserialize.html
http://www.suchso.com/UIweb/json2-js-stringify-parse-serializable-deserialize.html
3 楼
jackyrong
2014-01-17
sootv 写道
请问下jackson可以生成这种格式不,标准json格式是{key1:value1,key2:value2},而我只要value,如{value1,value2}
可以的,参考:http://jackyrong.iteye.com/blog/1936581
2 楼
sootv
2014-01-16
请问下jackson可以生成这种格式不,标准json格式是{key1:value1,key2:value2},而我只要value,如{value1,value2}
1 楼
shmily2038
2014-01-16
{ "id": 1, "itemName": "theItem", [b] "owner": { "id": 2, "name": "theUser" } [/b] } 如果要输出为如下的样子,比如; { "id": 25, "itemName": "FEDUfRgS", [b]"owner": 15 [/b] }
刚开始看,看不出两者的关系。。。。。
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1564方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2015前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3462info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2229import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 488https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 681public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 605https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 666https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 432https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5341 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3094微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 611https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1840什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 960本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1358原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 854public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 667在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 935-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 767一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1903介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
Jackson库是Java开发中常用的序列化和反序列化工具,主要处理JSON数据,但也支持XML。这个库由FasterXML公司开发,旨在提供高性能、易用性以及灵活性。在Java应用中,序列化是将对象转换为可传输或存储的格式(如...
在实际开发中,你可能还需要配置`ObjectMapper`以满足特定需求,比如日期格式化、忽略未知属性、自定义序列化策略等。这可以通过设置`ObjectMapper`的配置属性或者使用注解来实现。 为了在项目中使用这些jar包,你...
通过自定义反序列化方法,我们可以灵活地处理各种复杂的数据映射需求,将JSON数据准确无误地转换成Java对象,以供后端业务逻辑处理。这一过程不仅涉及到Java反射机制的运用,同时也需要对JSON格式有深入的理解。对于...
在Java开发中,序列化和反序列化是数据转换的重要环节,主要用于将对象转换为可存储或传输的数据格式,如JSON字符串,以及将这些数据还原为原来的对象。本压缩包包含fastJson、Gson和Jackson这三种流行JSON库的jar...
4. **自定义序列化**:有时,我们可能希望对序列化过程有更精细的控制,比如忽略某些字段或使用特定的序列化策略。这时可以实现`writeObject()`和`readObject()`方法来自定义序列化行为。 5. **序列化框架**:除了...
三、自定义序列化与反序列化 在某些情况下,我们可能需要对特定的字段或对象进行自定义处理。Jackson和Gson都提供了这样的功能: - Jackson中的`@JsonSerialize`和`@JsonDeserialize`注解可以指定自定义的序列化器...
4. **自定义序列化器和反序列化器**: - `LocalDateTimeSerializer`和`LocalDateSerializer`以及`LocalTimeSerializer`都是Jackson的`JsonSerializer`和`JsonDeserializer`的子类,它们分别用于序列化和反序列化`...
Jackson还支持注解驱动的映射,允许开发者通过注解来控制序列化和反序列化的具体行为。 这三个库各有特点,Fastjson以其速度和简洁性脱颖而出,Gson则以其灵活性和对复杂类型的处理能力受到青睐,而Jackson则在功能...
它的使用简单,支持复杂的类型转换,包括泛型、枚举、自定义序列化和反序列化策略。Gson的优势在于其灵活性和强大的类型处理能力,使得它在处理JSON数据时非常便捷。 2. Jackson(FasterXML Jackson): Jackson是...
Jackson是Java领域中广泛使用的JSON处理库,以其高效、灵活的序列化和反序列化功能而闻名。在本文中,我们将深入探讨Jackson的使用方法,尤其是它在序列化效率方面表现出的优势。 首先,Jackson的核心组件包括`...
2. **脆弱的自定义序列化**:在`readObject`方法中直接执行未经验证的用户输入,可能导致代码执行。 3. **反射滥用**:攻击者可以通过序列化数据控制反射调用,执行敏感方法或构造对象。 4. **第三方库的不安全实现*...
Jackson是Java领域中广泛使用的JSON处理库,它提供了高效的序列化和反序列化功能,能够将Java对象转换为JSON格式的字符串,同时也能将JSON数据转换回Java对象。在这个小例子中,我们将深入探讨如何使用Jackson进行...
本文将深入探讨JSON的序列化与反序列化过程,以及如何使用Gson、FastJson和Jackson这三种流行的Java库来实现这一功能。 一、什么是JSON序列化与反序列化? 1. JSON序列化:序列化是指将Java对象转换为JSON字符串的...
在`JacksonCustomizerConfig`类中,通过`@Value`注解读取配置文件中的日期格式,然后使用`Jackson2ObjectMapperBuilderCustomizer`来定制`Jackson`的配置,为特定的日期时间类型设置自定义的序列化和反序列化器。...
3. 处理异常:在转换过程中,如果JSON格式有误,反序列化库会抛出异常,需要捕获并处理。 五、JSON反序列化的注意事项 1. 数据类型匹配:确保JSON中的数据类型与目标语言的数据类型相匹配,例如JSON中的数字在...
3. 自定义序列化和反序列化逻辑:对于特殊类型的对象,可能需要提供自定义的序列化和反序列化逻辑。 4. 错误处理:在处理序列化和反序列化时,必须捕获和处理可能出现的异常,如格式错误、类型不匹配等。 在实际...
Jackson是Java生态系统中最流行的JSON库之一,提供了高效的序列化和反序列化功能。然而,标准的Jackson库并未直接支持Java的`javax.money`货币类型,这使得处理这类数据时需要额外的适配。 `Jackson-datatype-money...
然而,在实际使用过程中,由于序列化工具的选择和配置不当,可能会引发一系列问题。这篇博客讨论的就是这类问题,特别是如何理解和解决由序列化工具导致的困扰。 在Redis中,当我们存储复杂的数据结构,如Java对象...
- **只序列化需要的部分**:通过`writeObject()`和`readObject()`方法自定义序列化和反序列化过程,避免序列化整个对象,提高效率。 - **流式序列化**:使用`ObjectStreamClass`和`ObjectStreamConstants`类,可以...
Jackson提供了丰富的注解,用于自定义序列化和反序列化的规则。例如,`@JsonProperty`用于指定字段与JSON属性的映射,`@JsonIgnore`用于忽略某个字段,`@JsonFormat`用于控制日期和时间的格式等。 ```java public ...