`
xp9802
  • 浏览: 1204516 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

json解析之jackson ObjectMapper

阅读更多

Json解析常用的有fastjson和jackson,性能上网上有不少的对比,说是fastjson比较好,今天先整理一下jackson的东西,后面再发一个fastjson的。

jackson是spring mvc内置的json转换工具,fastjson则是阿里做的开源工具包。

jackson序列化如下:

复制代码
 1 /**
 2  * json serialize
 3  * @param obj
 4  * @return
 5 */
 6 public static String jsonSerialize(final Object obj) {
 7     ObjectMapper om = new ObjectMapper();
 8     try {
 9         return om.writeValueAsString(obj);
10     } catch (Exception ex) {
11         return null;
12     }
13 }
复制代码

jackson反序列化如下:

复制代码
 1 /**
 2  * json deserialize
 3  * @param json
 4  * @param mapClazz
 5  * @return
 6 */
 7 public static Object jsonDeserialize(final String json, final Class<?> mapClazz) {
 8     ObjectMapper om = new ObjectMapper();
 9     try {
10         return om.readValue(json, mapClazz);
11     } catch (Exception ex) {
12         return null;
13     }
14 }
复制代码

在使用的过程中,很有可能会遇到json反序列化的问题。当你对象中有get***()的地方,它就当做它是一个属性,所以当你序列化json之后,在反序列化的时候,很有可能会出现异常的情况,因为在你的model中没有这个***的定义。

那该如何处理和解决呢?

jackson给出了它自己的解决方案(JacksonHowToIgnoreUnknow):

1. 在class上添加忽略未知属性的声明:@JsonIgnoreProperties(ignoreUnknown=true)

2. 在反序列化中添加忽略未知属性解析,如下:

复制代码
 1 /**
 2  * json deserialize
 3  * @param json
 4  * @param mapClazz
 5  * @return
 6 */
 7 public static Object jsonDeserialize(final String json, final Class<?> mapClazz) {
 8     ObjectMapper om = new ObjectMapper();
 9     try {
10         // 忽略未知属性
11         om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
12         return om.readValue(json, mapClazz);
13     } catch (Exception ex) {
14         return null;
15     }
16 }
复制代码

3. 添加"Any setter"来处理未知属性

复制代码
1 // note: name does not matter; never auto-detected, need to annotate
2 // (also note that formal argument type #1 must be "String"; second one is usually
3 // "Object", but can be something else -- as long as JSON can be bound to that type)
4 @JsonAnySetter
5 public void handleUnknown(String key, Object value) {
6     // do something: put to a Map; log a warning, whatever
7 }
复制代码

4. 注册问题处理句柄

注册一个DeserializationProblemHandler句柄,来调用ObjectMapper.addHandler()。当添加的时候,句柄的handleUnknownProperty方法可以在每一个未知属性上调用一次。

这个方法在你想要添加一个未知属性处理日志的时候非常有用:当属性不确定的时候,不会引起一个绑定属性的错误

分享到:
评论

相关推荐

    json数据解析ObjectMapper类需要使用的jar包

    json数据解析ObjectMapper类需要使用的jar包 org.codehaus.jackson.map.ObjectMapper jackson-mapper-asl-1.9.13.jar

    json解析利器-jackson

    - **使用`JsonNode` API**:对于更灵活的JSON解析,可以使用`JsonNode`抽象类,它表示JSON结构的树形模型。你可以遍历节点、获取值、修改数据等。 - **处理复杂类型**:Jackson支持Java集合(List、Set、Map)以及...

    json转换工具jackson

    Jackson是Java领域中处理JSON的主流库之一,由 FasterXML 组织开发,提供了高效且灵活的JSON序列化和反序列化功能。本文将深入探讨Jackson作为JSON转换工具的关键知识点,并基于提供的博文链接进行补充。 1. **...

    实例解析Json反序列化之ObjectMapper(自定义实现反序列化方法)

    ObjectMapper是Jackson库中的一个核心类,它提供了丰富的API来处理JSON数据。在服务器端开发中,我们常常需要处理来自第三方接口的JSON数据,将其转换成Java对象,以便进一步处理和封装后返回给客户端。ObjectMapper...

    最全的 json解析JAR包

    本篇将详细介绍JSON解析相关的知识点,并针对"最全的json解析JAR包"进行解析。 1. JSON基本结构: JSON基于JavaScript的一个子集,主要由对象(Object)和数组(Array)两种数据结构组成。对象是键值对的集合,用...

    Jackson 配置json解析器

    标题中的“Jackson配置json解析器”指的是使用Jackson库来设置和管理JSON数据的解析过程。在这个场景中,我们看到的三个文件——`jackson-core-2.5.4.jar`, `jackson-annotations-2.5.4.jar`, `jackson-databind-...

    Java json工具类,jackson工具类,ObjectMapper工具类

    这些方法通常包括对单个对象或集合的序列化和反序列化,以及JSON解析等。以下是一些可能存在于`JacksonUtils`中的常见方法: ```java // 将Java对象转换为JSON字符串 public static String toJson(Object obj) { ...

    Java Json解析,Java Web Json解析,Java Web服务端获取Json数据,客户端通过HTTP获取Json数据

    1. Jackson JSON解析: Jackson是Java中非常流行的JSON处理库,提供了强大的功能和优秀的性能。它提供了多个模块,如`jackson-databind`用于对象映射,`jackson-core`包含基本JSON处理功能,`jackson-annotations`...

    三种json解析方法

    下面将详细介绍这三种流行的JSON解析库。 1. **json-lib**: json-lib是Java的一个开源库,它提供了一套完整的JSON处理API,包括JSON的解析、生成、转换等功能。json-lib支持多种Java对象到JSON的转换,例如...

    json.rar_JSON_json解析_json解析的jar_解析json

    描述中提到的"json解析的第三方jar包"很可能指的是如Gson、Jackson、org.json或Fastjson等流行的JSON解析库。这些库提供了一系列API,使得开发者可以方便地将JSON字符串转换为Java对象,或者将Java对象转换为JSON...

    Jackson进行JSON解析和序列化jar包

    使用Jackson进行JSON解析和序列化的简单示例: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws Exception { String json...

    json解析包(完整)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务之间的数据传输。它以文本形式存储和传递数据,结构清晰,...正确地使用JSON解析包,可以使得数据的序列化和反序列化变得简单高效。

    hello-jackson-objectmapper:使用Jackson ObjectMapper将JSON转换为Java对象的教程

    在Java开发中,处理JSON数据是一项常见的任务,而Jackson库是Java中广泛使用的JSON解析库之一,特别是它的ObjectMapper组件,能方便地实现JSON与Java对象之间的相互转换。本教程将深入探讨如何使用Jackson ...

    json解析 jar包

    在使用Jackson库进行JSON解析时,首先需要添加对应的JAR包到项目类路径中。在现代的构建工具如Maven或Gradle中,可以通过添加依赖的方式来引入。例如,在Maven的`pom.xml`文件中,可以这样写: ```xml &lt;groupId&gt;...

    安卓json解析

    以上就是关于"安卓json解析"的基本知识点,涵盖了常见的JSON解析方式,包括Gson、org.json、Volley以及OkHttp+Jackson的使用,同时也提到了自定义解析和性能优化的策略。通过学习这些内容,你应该能应对大部分...

    Json解析7个完整架包

    Jackson是Java中最流行的JSON库之一,提供了多种API,如`ObjectMapper`用于将Java对象转换为JSON和反向转换。它的高速度和灵活性使其成为大型项目中的首选。Jackson还支持JSON-P(Java API for JSON Processing)和...

    最好用的Json工具.exe

    1. JSON解析库:Android SDK本身包含了`org.json`包,提供简单的JSON解析。但更常用的是Gson库(由Google提供)和Jackson库,它们提供了更强大的序列化和反序列化功能,可以直接将JSON字符串转化为Java对象或反之。 ...

    java 解析 json文件 java 解析 json文件

    一、JSON解析库 1. Jackson:Jackson是Java中最流行的JSON处理库之一,提供了多种API用于序列化和反序列化JSON。使用Jackson的`com.fasterxml.jackson.databind.ObjectMapper`类可以轻松地将JSON字符串转换为Java...

    android json解析(包含服务器端,客户端)

    总结,理解并熟练掌握JSON解析是Android开发者必备的技能之一,无论是在客户端解析服务器返回的数据,还是在服务器端处理客户端的请求,JSON都起着至关重要的作用。通过选择合适的库和遵循最佳实践,可以使你的JSON...

    jackson 对象json字符串数组集合互转

    Jackson的核心类`ObjectMapper`提供了对象与JSON之间的转换功能。它可以将任何Java对象转换为JSON字符串,同时也可以将JSON字符串解析成Java对象。例如,`objectMapper.writeValueAsString(obj)`用于对象转JSON,而...

Global site tag (gtag.js) - Google Analytics