`

java 反序列化复杂Map

    博客分类:
  • Java
阅读更多

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

 

 

1
0
分享到:
评论

相关推荐

    Java Json序列化与反序列化

    除了基本数据类型和简单对象,我们还可能遇到数组、集合、Map等复杂数据类型的序列化和反序列化。Jackson和Gson都能很好地处理这些情况,例如: ```java public class Address { private String street; private ...

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

    通过自定义反序列化方法,我们可以灵活地处理各种复杂的数据映射需求,将JSON数据准确无误地转换成Java对象,以供后端业务逻辑处理。这一过程不仅涉及到Java反射机制的运用,同时也需要对JSON格式有深入的理解。对于...

    json-lib 序列化和反序列化

    在`json-lib`中,序列化是指将Java对象转换成JSON字符串的过程,而反序列化则是将JSON字符串转换回Java对象。以下是对这两个过程的详细说明: 1. **序列化**: - 使用`json-lib`,你可以通过`...

    vc++实现反射式数据库模版(3.序列化、反序列化与消息映射)

    4. **序列化/反序列化实现**:实现序列化和反序列化功能,使对象能够以某种格式(如XML、JSON或二进制)在内存和文件之间进行转换。 5. **消息映射的动态构建**:创建动态的消息映射系统,允许在运行时添加、删除或...

    Json序列化时动态处理属性

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端数据传输。...在实际开发中,了解并熟练掌握这两个库的用法,将有助于提高工作效率,处理各种复杂的JSON序列化和反序列化场景。

    java常见的序列化方式

    然而,这也意味着Java序列化生成的字节流通常比其他轻量级序列化方式要大,且序列化和反序列化的过程相对较慢。 相比之下,Hessian序列化是一种优化过的、高效的序列化框架,由Caucho公司开发。Hessian的目标是提供...

    JAVA基于SnakeYAML实现解析与序列化YAML

    JAVA基于SnakeYAML实现解析与序列化YAML JAVA基于SnakeYAML实现解析与序列化YAML是JAVA开发中的一种常见需求,本文主要介绍了如何使用SnakeYAML库将YAML文档转换为Java对象,以及Java对象如何序列化为YAML文档。...

    Java 实现Redis存储复杂json格式数据并返回给前端

    这种方式能处理更复杂的数据结构,但需要注意的是,序列化后的对象会占用更多空间,并且序列化和反序列化过程可能涉及性能开销。 4. **Redis的Key设计**:在实际应用中,合理设计Redis的Key非常重要。Key应简洁且...

    浅谈Java序列化和hessian序列化的差异

    如果你需要序列化复杂对象,或者需要可靠和灵活的序列化机制,那么Java序列化是一个不错的选择。如果你需要高效的序列化机制,并且可以接受一定的实现复杂度,那么Hessian序列化是一个不错的选择。 Java序列化和...

    16_尚硅谷大数据之MapReduce_Hadoop序列化1

    此外,还有MapWritable和ArrayWritable来序列化复杂的数据结构如Map和数组。 **2.3 自定义Bean对象实现序列化接口(Writable)** 要使自定义的Bean对象能在Hadoop环境中进行序列化传输,需要遵循以下步骤: 1. 实现...

    ChronicleMap-Java高效键值对存储

    6. **序列化与反序列化**:Chronicle Map允许用户自定义序列化和反序列化机制,这使得它能很好地适应各种数据类型,包括自定义对象。 7. **高效的空间利用率**:Chronicle Map采用了紧凑的数据结构,有效地减少了...

    不用第三方jar的json与object(map、list)互换java类

    测试实例通常是验证这些类功能的代码片段,它们会创建一些示例数据,然后尝试将这些数据转换为JSON,再反序列化回原对象,以确保数据的正确性。 总结来说,这两个类实现了基本的JSON与Java对象之间的转换,这对于不...

    Flink 数据类型与序列化.pdf

    在源码层面,Flink的序列化框架使用到了多种策略,如Java序列化、Kryo序列化和Avro序列化等,以达到优化性能和减小数据体积的目的。不同的序列化策略在不同的使用场景下有不同的表现,因此,选择合适的序列化方式...

    序列化工具jackson

    Jackson是Java领域中广泛使用的序列化和反序列化库,由FasterXML团队开发并维护。它能够将Java对象转换为JSON格式的数据,同时也能够将JSON数据解析回对应的Java对象,极大地简化了Java应用程序与JSON数据的交互。...

    JSON键值对序列化和反序列化解析

    在实际开发中,理解JSON序列化和反序列化的重要性在于,它允许我们方便地在不同系统间传递数据,无论这些系统使用何种编程语言。JSON因其简洁和易于解析的特性,已经成为Web服务和API之间交换数据的事实标准。 总的...

    Fastjson解析案例

    Fastjson的序列化过程是指将Java对象转换成JSON字符串,这对于将复杂的数据结构通过网络传输或者存储到文件中非常有用。例如,如果你有一个Java Bean对象,Fastjson可以将其属性及其值转化为JSON格式,使得数据易于...

    java集合,多线程,序列化等基础练习源码

    Java集合、多线程以及序列化是Java编程中不可或缺的基础概念。这些技术广泛应用于各种复杂的系统设计和开发中,理解并熟练掌握它们对于提升Java程序员的技能至关重要。 首先,我们来详细探讨Java集合。Java集合框架...

    使用Java反射机制将Map转换为Java对象,支持Boolean、Date类型

    这种利用反射的方法在处理动态数据模型或序列化/反序列化场景时非常有用,但也要注意其性能开销,因为它涉及到运行时的类型检查和方法调用。在效率敏感的代码中,可能需要考虑使用更高效的库,如Jackson或Gson,它们...

    REST_JavaMap_Req_java_JSON_

    在这个特定的场景中,"REST_JavaMap_Req_java_JSON_" 提示我们讨论的是如何在Java中使用Map对象作为REST请求的数据模型,并通过JSON(JavaScript Object Notation)进行序列化和反序列化。JSON是一种轻量级的数据...

    Gson与Map互相转化

    此外,对于更复杂的JSON到Java对象的映射,可以使用`@SerializedName`注解来指定JSON字段和Java字段之间的映射关系,以便在反序列化时保持一致。 总的来说,Gson库提供了简单且强大的工具来处理JSON数据和Java对象...

Global site tag (gtag.js) - Google Analytics