java 如何反序列化复杂的map呢?
例如:
待反序列化的json字符串:
{"/policyTemplate":{"modifyType":2,"keyword":"12","replacement":"4"}}
什么是复杂的map呢?
即map的key不是简单的int或者String,而是一个复杂的对象,比如Student,User等
实例:
map中key对应的java bean:
package com.common.bean; /** * Created by 黄威 on 19/01/2017.<br > * 修改类型:1-完全替换;<br />2-关键字替换;<br />3-正则表达式替换 */ public class ModifyTypeInfo { /*** * 1-完全替换 */ public static final int MODIFY_TYPE_REPLACE_TOTALLY=1; /*** * 2-关键字替换 */ public static final int MODIFY_TYPE_KEY_WORD=2; /*** * 3-正则表达式替换 */ public static final int MODIFY_TYPE_REGUX_REPLACE=3; private int modifyType; private String keyword; private String replacement; public int getModifyType() { return modifyType; } public void setModifyType(int modifyType) { this.modifyType = modifyType; } public String getKeyword() { return keyword; } public void setKeyword(String keyword) { this.keyword = keyword; } public String getReplacement() { return replacement; } public void setReplacement(String replacement) { this.replacement = replacement; } }
单元测试:
@Test public void test_map(){ String modifyConf="{\"/policyTemplate\":{\"modifyType\":2,\"keyword\":\"12\",\"replacement\":\"9\"}}"; Map<String, ModifyTypeInfo> proxymodifyResponseBodyMap=HWJacksonUtils.deSerializeMap(modifyConf,ModifyTypeInfo.class); System.out.println(proxymodifyResponseBodyMap); }
核心方法:
/** * 获取泛型的Collection Type * @param collectionClass 泛型的Collection * @param elementClasses 元素类 * @return JavaType Java类型 * @since 1.0 */ public static JavaType getCollectionType(ObjectMapper mapper,Class<?> collectionClass, Class<?>... elementClasses) { return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses); } /*** * 反序列化复杂map * @param jsonInput * @param clazz * @return */ public static Map deSerializeMap(String jsonInput, Class clazz) { Map obj = null; try { ObjectMapper mapper = getObjectMapper(); JavaType javaType = getCollectionType(mapper, HashMap.class, String.class, clazz); obj = mapper.readValue(jsonInput, javaType); return obj; } catch (Exception e) { e.printStackTrace(); } return obj; }
实例:
//读取配置文件,并反序列化 private void parseConfig() { try { String configJson = readConfig(configFileTextField.getText2()); proxyModifyResponseBodyMap = HWJacksonUtils.deSerializeMap(configJson, ModifyTypeInfo.class); servletPathList = new ArrayList<>(); for (String key : proxyModifyResponseBodyMap.keySet()) { servletPathList.add(key); } } catch (IOException e) { e.printStackTrace(); } }
详情参考附件中的类:com/io/hw/json/HWJacksonUtils.java
相关推荐
除了基本数据类型和简单对象,我们还可能遇到数组、集合、Map等复杂数据类型的序列化和反序列化。Jackson和Gson都能很好地处理这些情况,例如: ```java public class Address { private String street; private ...
通过自定义反序列化方法,我们可以灵活地处理各种复杂的数据映射需求,将JSON数据准确无误地转换成Java对象,以供后端业务逻辑处理。这一过程不仅涉及到Java反射机制的运用,同时也需要对JSON格式有深入的理解。对于...
在`json-lib`中,序列化是指将Java对象转换成JSON字符串的过程,而反序列化则是将JSON字符串转换回Java对象。以下是对这两个过程的详细说明: 1. **序列化**: - 使用`json-lib`,你可以通过`...
4. **序列化/反序列化实现**:实现序列化和反序列化功能,使对象能够以某种格式(如XML、JSON或二进制)在内存和文件之间进行转换。 5. **消息映射的动态构建**:创建动态的消息映射系统,允许在运行时添加、删除或...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端数据传输。...在实际开发中,了解并熟练掌握这两个库的用法,将有助于提高工作效率,处理各种复杂的JSON序列化和反序列化场景。
然而,这也意味着Java序列化生成的字节流通常比其他轻量级序列化方式要大,且序列化和反序列化的过程相对较慢。 相比之下,Hessian序列化是一种优化过的、高效的序列化框架,由Caucho公司开发。Hessian的目标是提供...
JAVA基于SnakeYAML实现解析与序列化YAML JAVA基于SnakeYAML实现解析与序列化YAML是JAVA开发中的一种常见需求,本文主要介绍了如何使用SnakeYAML库将YAML文档转换为Java对象,以及Java对象如何序列化为YAML文档。...
这种方式能处理更复杂的数据结构,但需要注意的是,序列化后的对象会占用更多空间,并且序列化和反序列化过程可能涉及性能开销。 4. **Redis的Key设计**:在实际应用中,合理设计Redis的Key非常重要。Key应简洁且...
如果你需要序列化复杂对象,或者需要可靠和灵活的序列化机制,那么Java序列化是一个不错的选择。如果你需要高效的序列化机制,并且可以接受一定的实现复杂度,那么Hessian序列化是一个不错的选择。 Java序列化和...
此外,还有MapWritable和ArrayWritable来序列化复杂的数据结构如Map和数组。 **2.3 自定义Bean对象实现序列化接口(Writable)** 要使自定义的Bean对象能在Hadoop环境中进行序列化传输,需要遵循以下步骤: 1. 实现...
6. **序列化与反序列化**:Chronicle Map允许用户自定义序列化和反序列化机制,这使得它能很好地适应各种数据类型,包括自定义对象。 7. **高效的空间利用率**:Chronicle Map采用了紧凑的数据结构,有效地减少了...
测试实例通常是验证这些类功能的代码片段,它们会创建一些示例数据,然后尝试将这些数据转换为JSON,再反序列化回原对象,以确保数据的正确性。 总结来说,这两个类实现了基本的JSON与Java对象之间的转换,这对于不...
在源码层面,Flink的序列化框架使用到了多种策略,如Java序列化、Kryo序列化和Avro序列化等,以达到优化性能和减小数据体积的目的。不同的序列化策略在不同的使用场景下有不同的表现,因此,选择合适的序列化方式...
Jackson是Java领域中广泛使用的序列化和反序列化库,由FasterXML团队开发并维护。它能够将Java对象转换为JSON格式的数据,同时也能够将JSON数据解析回对应的Java对象,极大地简化了Java应用程序与JSON数据的交互。...
在实际开发中,理解JSON序列化和反序列化的重要性在于,它允许我们方便地在不同系统间传递数据,无论这些系统使用何种编程语言。JSON因其简洁和易于解析的特性,已经成为Web服务和API之间交换数据的事实标准。 总的...
Fastjson的序列化过程是指将Java对象转换成JSON字符串,这对于将复杂的数据结构通过网络传输或者存储到文件中非常有用。例如,如果你有一个Java Bean对象,Fastjson可以将其属性及其值转化为JSON格式,使得数据易于...
Java集合、多线程以及序列化是Java编程中不可或缺的基础概念。这些技术广泛应用于各种复杂的系统设计和开发中,理解并熟练掌握它们对于提升Java程序员的技能至关重要。 首先,我们来详细探讨Java集合。Java集合框架...
这种利用反射的方法在处理动态数据模型或序列化/反序列化场景时非常有用,但也要注意其性能开销,因为它涉及到运行时的类型检查和方法调用。在效率敏感的代码中,可能需要考虑使用更高效的库,如Jackson或Gson,它们...
在这个特定的场景中,"REST_JavaMap_Req_java_JSON_" 提示我们讨论的是如何在Java中使用Map对象作为REST请求的数据模型,并通过JSON(JavaScript Object Notation)进行序列化和反序列化。JSON是一种轻量级的数据...
此外,对于更复杂的JSON到Java对象的映射,可以使用`@SerializedName`注解来指定JSON字段和Java字段之间的映射关系,以便在反序列化时保持一致。 总的来说,Gson库提供了简单且强大的工具来处理JSON数据和Java对象...