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
相关推荐
2. 支持复杂对象与JSON的映射:支持Java类型如Map、List、数组以及自定义bean与JSON的相互转换。 3. 支持多种注解配置序列化和反序列化:支持@JsonIgnore, @JsonFormat, @JsonView等多种注解配置对象与JSON的映射方式...
3. 支持用户自定义序列化和反序列化的规则。可以直接将gson和bean-validation框架结合,校验Java对象的字段。 4. 支持基本数据类型及其封装类型,Collection类型,Date类型及自定义类型。 5. 支持将JSON数组转换为Java...
3. 支持注解:支持@JSON、@JSONIgnore等注解配置对象的序列化和反序列化。 4. 支持流:除了支持对象/JSON与字符串的相互转换,也支持与InputStream/OutputStream的相互转换,处理大数据时比较有用。 5. 无依赖:json-lib...
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...
的对象变少),但是,读取数据时需要序列化/反序列化,因此会比堆缓存要慢很多。有 Ehcache 3.x、MapDB实现磁盘缓存 即缓存数据存储在磁道上,在JVM重启时数据还存在的,而堆缓存/堆外缓存数据会丢失 ,需要重新加载...
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...
答:JDO是java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。 CORBA? 答:CORBA标准是公共对象请求代理结构,用途为:用不同的程序设计语言书写,在不同的...
使用堆缓存的好处是没有序列化/反序列化,是最快的缓 存.缺点也很明显,当缓存的数据量很大时,GC〔垃圾回收〕暂停时间会变长,存储容量受 限于堆空间大小.一般通过软引用/弱引用来存储缓存对象,即当堆内存不足时,可以...
特征全功能,复杂的,基于类的类型系统支持JSON模式draft4功能,包括将模式映射到代码和将代码映射到模式序列化,类JSON的dict和typedpy对象之间的反序列化,包括自定义映射。 支持酸洗。 容易扩展。结构/字段内的...
霍利保持器一个 Android... 尽管如此,由于保留的对象不能被打包或序列化,它们仍然可以被垃圾收集器回收,从而导致数据丢失。 public class ExampleActivity extends Activity { @HawleyRetain Observable< Respons
A .POJO类中的任何布尔类型的变量,都不要加is,因为部分框架解析时有可能会出现序列化错误。 B .包名统一使用单数形式,如:com.alibaba.mpp.util。 C .中括号是数组类型的一部分,数组定义如下:String[] ...
泛型、支持的序列化对象种类等进行增强的框架。 增强的反射机制,可以对接口和POJO对象中的嵌套泛型、继承泛型等进行完整的解析,从而使得带有各种复杂泛型的接口可以正确发布和传输。 简化集成,针对目前大多数服务...
170 第7章 流程变量 171 7.1 变量作用域 173 7.2 变量类型 174 7.3 变量的自动更新和序列化 175 7.4 例程:用变量去控制一个流程的运行 177 7.5 小结 179 第8章 流程脚本 182 8.1 Java统一表达式语言 182 8.1.1 语法...
8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 (Dynamic components) 9. 继承映射(Inheritance Mappings) 9.1. 三种策略 ...
符合Java习惯的关系数据库持久化 目录 前言 1. 翻译说明 2. 版权声明 1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 ...
而以序列化的JavaScript对象为基础的JSON已经获得了广泛认可,它被认为能以远比XML更好的方式来序列化和传输简单数据结构,而且它更简洁。这对REST是一个极大贡献和补充。 当前的网络应用软件还违背了REST的“无...
9.3. 组件作为Map的索引(Components as Map indices ) 9.4. 组件作为联合标识符(Components as composite identifiers) 9.5. 动态组件 (Dynamic components) 10. 继承映射(Inheritance Mappings) 10.1. 三种...
在模板里对sequences和hashes初始化 sequences 1. [“you”,”me”,”he”] 2. 1..100 3. [ {“Akey”:”Avalue”},{“Akey1”:”Avalue1”}, {“Bkey”:”Bvalue”},{“Bkey1”:”Bvalue1”}, ] hashes {“you”:...
使用Toad,我们可以通过一个图形化的用户界面快速访问数据库,完成复杂的SQL和PL/SQL代码编辑和测试工作。Toad由Oracle开发专家专门为开发人员而设计,是一个功能强大、结构紧凑的专业化PL/SQL开发环境。 Toad 主要...
因此,如果一个进程运行超出了它初始分配的内存,那么它必须请求操作系统“映射进来(map in)”更多的内存。(映射是一个表示一一对应关系的数学术语 —— 当内存的虚拟地址有一个对应的物理地址来存储内存内容时,...