使用String转换到Map结构

 更新时间:2021年11月03日 10:50:47   作者:老柿子  
这篇文章主要介绍了使用String转换到Map结构,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

String转换到Map结构

下面的仅限于个人测试

最近工作中遇到一个问题,就是需要将一个Map < String, Object > 这样的一个类型进行保存,后续并进行读取的功能。当时没有想起来用常见的序列化方式,想起来Map.toString()这样可以将Map转换到String,但是却没有对应的反向的方法。

自己就想着实现这样一个功能,觉得不错,故将转换代码贴在如下,但是map的序列化方式还有其他的很多方式,这个只是自己实现的map.toString()的反向转换:

public Object getValue(String param) {
        Map map = new HashMap();
        String str = "";
        String key = "";
        Object value = "";
        char[] charList = param.toCharArray();
        boolean valueBegin = false;
        for (int i = 0; i < charList.length; i++) {
            char c = charList[i];
            if (c == '{') {
                if (valueBegin == true) {
                    value = getValue(param.substring(i, param.length()));
                    i = param.indexOf('}', i) + 1;
                    map.put(key, value);
                }
            } else if (c == '=') {
                valueBegin = true;
                key = str;
                str = "";
            } else if (c == ',') {
                valueBegin = false;
                value = str;
                str = "";
                map.put(key, value);
            } else if (c == '}') {
                if (str != "") {
                    value = str;
                }
                map.put(key, value);
                return map;
            } else if (c != ' ') {
                str += c;
            }
        }
        return map;
    }

测试用例

从简单到复杂

public void testFun() {
        String str1 = "{idCard=123, phonenum=1234}";
        String str2 = "{idCard=123, phonenum=1234, map={hhaha=haha}}";
        String str3 = "{idCard=123, phonenum=1234, map={hhaha=haha}, nn={en=ha}}";
        String str4 = "{nn={en=ha}, idCard=123, phonenum=1234, map={hhaha=ni, danshi={ke=shi}}}";
        Map<String, Object> mapresutl1 = (Map<String, Object>) getValue(str1);
        Map<String, Object> mapresutl2 = (Map<String, Object>) getValue(str2);
        Map<String, Object> mapresutl3 = (Map<String, Object>) getValue(str3);
        Map<String, Object> mapresutl4 = (Map<String, Object>) getValue(str4);
        System.out.println(mapresutl1.toString());
        System.out.println(mapresutl2.toString());
        System.out.println(mapresutl3.toString());
        System.out.println(mapresutl4.toString());
    }

输出结果:

{idCard=123, phonenum=1234} {idCard=123, phonenum=1234, map={hhaha=haha}} {nn={en=ha}, idCard=123, phonenum=1234, map={hhaha=haha}} {nn={en=ha}, idCard=123, phonenum=1234, map={hhaha=ni, danshi={ke=shi}}}

该函数的功能是能够处理将Map < String, Object > .toString的字符串再次翻转到对应的Map中,其中Object只能是Map类型或者其他基本的类型才行,如果是复杂的这里不涉及,或者说可以将复杂的结构用Map的键值对来表示,这样就可以用这种方式。

后来发现,序列化的方式有很多,所以也没有必要自己去实现一个,map也是可以进行序列化的

如下几个序列化方式

java自带的,json,hession

还有阿里的fastjson,protobuff等

上面几个都可以实现map的序列化

特殊格式的String转Map

String a ="{se=2016, format=xml, at=en co=3}";
a =  a.substring(1, a.length()-1);
Map docType = new HashMap();  
java.util.StringTokenizer items;  
for(StringTokenizer entrys = new StringTokenizer(a, ", ");entrys.hasMoreTokens();   
docType.put(items.nextToken(), items.hasMoreTokens() ? ((Object) (items.nextToken())) : null)){  
     items = new StringTokenizer(entrys.nextToken(), "=");  
   }
System.out.println(docType);
System.out.println("a:"+docType.get("a"));

不需要吧JSONArray或者JSONObject作为处理的转存中介,String直接转Map

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java的动态代理和静态代理详解

    Java的动态代理和静态代理详解

    这篇文章主要为大家详细介绍了Python实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 详解SpringBoot项目整合Vue做一个完整的用户注册功能

    详解SpringBoot项目整合Vue做一个完整的用户注册功能

    本文主要介绍了SpringBoot项目整合Vue做一个完整的用户注册功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 在Java与Kotlin之间如何进行互操作详解

    在Java与Kotlin之间如何进行互操作详解

    这篇文章主要给大家介绍了关于在Java和Kotlin之间如何进行互操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • SpringBoot如何使用@Value取配置文件中的map配置

    SpringBoot如何使用@Value取配置文件中的map配置

    这篇文章主要介绍了SpringBoot如何使用@Value取配置文件中的map配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • java显示声音波形图示例

    java显示声音波形图示例

    这篇文章主要介绍了java显示声音波形图示例,需要的朋友可以参考下
    2014-05-05
  • 详解Java的按位操作符

    详解Java的按位操作符

    Java的位操作符用来操作整数基本数据类型中的单个“比特”(bit),即代进制位。下面通过本文给大家分享Java的按位操作符,感兴趣的朋友一起看看吧
    2017-09-09
  • 如何使用MybatisPlus快速进行增删改查详解

    如何使用MybatisPlus快速进行增删改查详解

    增删改查在日常开发中是再正常不多的一个需求了,下面这篇文章主要给大家介绍了关于如何使用MybatisPlus快速进行增删改查的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 基于Java8 Stream API实现数据抽取收集

    基于Java8 Stream API实现数据抽取收集

    这篇文章主要介绍了基于Java8 Stream API实现数据抽取收集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Springboot整合log4j2日志全解总结

    Springboot整合log4j2日志全解总结

    这篇文章主要介绍了Springboot整合log4j2日志全解总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Java解析微信获取手机号信息的示例步骤

    Java解析微信获取手机号信息的示例步骤

    在微信中,用户手机号的获取通常是通过微信小程序的getPhoneNumber接口来实现的,下面通过一个基于Java的示例,展示了如何接收并解密从微信小程序传递过来的加密手机号信息,感兴趣的朋友一起看看吧
    2024-06-06

最新评论