2014-02-11 37 views
1

我得到一个字符串来自List<Map<String, String>>对象调用toString()。一些示例代码是:解析列表<Map <String,String >>字符串形式再次POJO

List<Map<String,String>> list = new ArrayList<Map<String,String>>(); 
Map<String, String> map = new HashMap<String, String>(); 

map.put("key1", "value1"); 
map.put("key2", "value2"); 

list.add(map); 

String myStr = list.toString(); 
System.out.println(myStr); 

此代码输出:

[{key2=value2, key1=value1}] 

我正在寻找一种简单的方法来解析这个字符串,并再次将其转换为List<Map<String, String>>。我只是想知道是否有任何构造函数/实用程序类可以轻松完成此操作。我已经看过来自谷歌的Java Collections库和Guava,但是我还没有发现任何已经构建的功能。这是否存在?

如果没有,我只会创建自己的解析器,但如果它存在的话我会重用一些代码。我喜欢DRY的概念。

+0

,如果你改变'='为':'那么你可以使用https://code.google。 com/p/google-gson/ –

+0

如果你想创建同名列表List >,那么你为什么试图解析字符串 – Kick

+1

收集类型的'toString()'形式仅仅是信息性的,所以没有标准的方法来解析它们。 – McDowell

回答

3

一般来说,你不能使用toString内建的方法来做到这一点,因为它没有做任何事情来使值可以解析,它只是试图给你一个有用的表示。作为一个特别反常的例子,考虑下面的代码演示了两个不同的地图可以有相同的打印表示:

import java.util.Map; 
import java.util.TreeMap; 

public class MapToStringExample { 
    public static void main(String[] args) { 
     Map<String,String> map1 = new TreeMap<>(); 
     map1.put("key1", "value1, key2=value2"); 
     System.out.println("Map1: "+map1); 

     Map<String,String> map2 = new TreeMap<>(); 
     map2.put("key1", "value1"); 
     map2.put("key2", "value2"); 
     System.out.println("Map2: "+map2); 
    } 
} 
Map1: {key1=value1, key2=value2} 
Map2: {key1=value1, key2=value2} 

如果你想在这样的地图的印刷表现看,你”或者需要对可以放入的值进行一些限制(例如,不包含任何包含=,的值),否则您需要编写自己的输出例程。

如果您希望避免重写代码,您可以查看序列化API,以便为您处理序列化和反序列化值。当然,在这种情况下,只需将字符串映射到字符串,您只需要一种方法来编写由定界符分隔的交替键和值,以及在字符串表示中转义该分隔符的方法(如果允许出现在字符串中;如果不是,那么你甚至不需要逃避它)。这不是一个序列化和反序列化任务太难。

1

这就是我的意思是在注释:

Gson gson = new Gson(); 
List<Map<String,String>> list = Lists.newArrayList(); 
Map<String, String> map = Maps.newHashMap(); 

map.put("key1", "value1"); 
map.put("key2", "value2"); 

list.add(map); 

String myStr = gson.toJson(list); 
System.out.println(myStr); 

List<Map<String,String>> newList = gson.fromJson(myStr, new TypeToken<List<Map<String, String>>>(){}.getType()); 

System.out.println(newList); 

输出:

[{"key2":"value2","key1":"value1"}] 
[{key2=value2, key1=value1}] 
相关问题