关于HashMap.toString转JSON的相关问题

rcedw 2017-03-19 04:33:57
如果一个项目有大量的Map和List,那么日志中将大量出现Map和List的相关信息
但是,当出现奇怪的问题时,我们必须要还原现场,那么就需要将日志中的Map,List进行String to Object的转换

目前比较流行的Jackson(FasterXML)是针对JOSN转化为java对象,需要将Map.toString, List.toString转化为标准的JOSN才行。

我没有找到一个更好的解决办法
暂时通过正则表达式,进行处理。

见多识广的CSDN大神们,帮我参谋参谋。现在是否有一个比较现成的工具能解决如上问题?还是鼓励我自己写个方法来嫁接桥梁?还是果断重写HashMap,做一个JOSNMap?

...全文
1196 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
feihuaway 2020-06-27
  • 打赏
  • 举报
回复
使用正则表达式,把map对象toString后的字符串转成json格式就可以了

Map test = new HashMap();
            test.put("a", "1");
            test.put("b", "2");
            test.put("c", "3");
            String testStr = test.toString();
            System.out.println(testStr);
            
            String jsonStr = testStr.replaceAll("([^,\\{\\s]*)=([^,\\]\\}]*)", "\"$1\":\"$2\"");
            System.out.println(jsonStr);
            
            System.out.println(new ObjectMapper().readValue(jsonStr, HashMap.class));
八阿哥别走 2017-03-20
  • 打赏
  • 举报
回复
用JSONObject和JSONArray,非常适合你这个场景
zs808 2017-03-20
  • 打赏
  • 举报
回复
我想。楼主应该是为了在Logger里输出HashMap的Json表示形式而不是传统的toString形式,以求可以“恢复现场”吧。 具体的解释就不说了,给楼主写个例子:
	//JsonMap实现
	public static class JsonMap<K, V> extends HashMap<K, V> {
		
		private static final long serialVersionUID = -4083915643878380063L;

		//从Json构造Map
		public static <K,V> JsonMap<K, V> fromJson(String json){
			@SuppressWarnings("unchecked")
			JsonMap<K, V> map = JSON.parseObject(json, JsonMap.class);
			return map;
		}
		
		//重写toString方法
		@Override
		public String toString(){
			return JSON.toJSONString(this);
		}
	}

	//测试
	public static void main(String[] args) {
		JsonMap<String, String> jmap = new JsonMap<String, String>();
		jmap.put("hello", "world");
		jmap.put("你好", "世界");
		String jmapString = jmap.toString();
		System.out.println(jmap); //此处会自动调用toString()
		jmap = JsonMap.fromJson(jmapString);
		System.out.println(jmap.get("hello"));
	}
这样,只需要把程序里需要恢复现场的HashMap改成JsonMap,然后修改恢复逻辑即可。 当然,你也可以将toString于fromJson方法包装到一个工具类中,这个就需要你根据具体的业务环境进行取舍了。
galiniur0u 2017-03-20
  • 打赏
  • 举报
回复
楼主可以尝试使用Json-Simple类库,该类类库中的JSONObject可以直接加入Map以及JSONArray直接加入List,并且可以通过toString将JSON实例转为JSON字符串或者通过Parser将字符串转为JSON实例。 如果楼主想要自己实现,就需要遍历你的Map、List,然后一个一个格式化输出你的字符串,其实如果Map或者List的格式固定,只要是格式化的文件都可以,不一定需要转成JSON,只要看着方便就可以。
quanjinzhang 2017-03-19
  • 打赏
  • 举报
回复
自己写一个Util类吧,通过遍历Map、List,转化为Json的String,正方向和反方向分别写一个方法就可以了,也不难,何必找呢?

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧