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包 org.codehaus.jackson.map.ObjectMapper jackson-mapper-asl-1.9.13.jar
主要介绍了实例解析Json反序列化之ObjectMapper,json自定义序列化的方法,需要的朋友可以了解下。
ObjectMapper mapper = new ObjectMapper(); return (T) mapper.readValue(str,cla); 2. 类对象转换成json字符串 ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(object);
你好杰克逊对象映射器 使用Jackson DataMapper进行JSON到Java对象的教程 要投标并运行测试: ./gradlew
springboot工程中使用ObjectMapper解析JSON字符串,实现对象和json相互转化,List和JSON相互转化,Map和JSON像话转化
NULL 博文链接:https://fanshuyao.iteye.com/blog/2319705
jackson-databind ,数据绑定包, 提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API (JsonNode);基于"对象绑定" 解析的 API 和"树模型"解析的 API 依赖基于"流模式"解析的 API。
一个Alamofire扩展使用ObjectMapper迅速将JSON数据转换成对象.zip,使用objectmapper将json响应数据转换为swift对象的alamofire扩展
将json转换为map之后,如果数值类型太多会在转换之后出现科学计数法的问题,经研究jackson源码、网上百度资料得知可以通过设置一些参数解决该问题
复杂的json转化为对象,有源码,jar包,直接运行,很好的学习资源
常见的解析器:Jsonlib,Gson,fastjson,jackson JSON转为Java对象 1. 导入jackson的相关jar包 2. 创建Jackson核心对象 ObjectMapper 3.调用ObjectMapper的相关方法进行转换 readValue(json字符串数据,...
只需使用BsonFactory创建一个Jackson ObjectMapper ,如下所示: ObjectMapper mapper = new ObjectMapper ( new BsonFactory ()); 有关更多信息,您可以阅读我的或的完整。 下载 bson4jackson二进制文件可从。 ...
ObjectMapper是用Swift编写的框架,可让您轻松地将模型对象(类和结构)与JSON相互转换。 特征: 将JSON映射到对象 将对象映射到JSON 嵌套对象(独立,数组或字典形式) 映射期间的自定义转换 结构支持 基础 ...
主要给大家介绍了关于在java中用ObjectMapper类实现Json与bean转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
程序化 JSON 视图在使用 Jackson 序列化对象时,是否需要以编程方式包含或排除字段? 好吧,如果你有那么你现在可能知道这是非常困难的。 Jackson 本质上是非常声明式的(所有内容的注释!),因此以编程方式执行...
ObjectMapper依赖的jar包
下载jar包导入工程即可,如是maven项目,复制下列依赖到pom.xml文件即可 <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind <version>2.9.5 </dependency>
通过org.codehaus.jackson.map.ObjectMapper读写json数据。它包含两种类型: 3.1 Simple Data Binding 用于json和Java Maps, Lists, Strings, Numbers, Booleans and nulls的相互转换。 3.2 Full Data Binding ...
ObjectMapper是一个用Swift编写的框架,它使您可以轻松地将模型对象(类和结构)转换为JSON和从JSON转换
jackson-databind基于Jackson核心库构建,以简单易用和高性能著称,是目前最流行的JSON库之一。 jackson-databind的主要功能有: 1. ObjectMapper:jackson-databind的核心类,用于转换Java对象和JSON。使用简单,一般就一...