Java - 将complexe List#toString转换为List

时间:2016-03-02 10:09:56

标签: java

我使用此列表:

List<HashMap<Map<String, Object>, Map<String, Object>>>

我需要将其保存到文本文件中。

因此,使用List#toString方法,我获得了类似的文本:

[{{key=value, key=value, key=value}={key=value, key=value}}, {{key=value, key=value, key=value}={key=value, key=value}}, {{key=value, key=value, key=value}={key=value, key=value}}]

如何将其转换回List?

谢谢!

3 个答案:

答案 0 :(得分:2)

最好使用JSON或YAML等格式。 Usng toString()表示在键或值中出现了= { },这样的极端案例。

答案 1 :(得分:0)

toString()方法生成一种用于记录和调试的格式,而不是用于序列化和反序列化。

我建议将对象转换为json格式(xml等其他格式也可以正常工作)并使用json库(如“Gson”)进行转换。

示例如何将对象转换为json字符串:

Gson gson = new Gson(); 
String json = gson.toJson(myObject);

示例如何将json字符串转换回对象,请参阅: creating Hashmap from a JSON String

更新:以下是第一部分的完整示例:

List<HashMap<Map<String, Object>, Map<String, Object>>> myObject = new ArrayList<>();
HashMap<Map<String, Object>, Map<String, Object>> hashMap1 = new HashMap<>();
myObject.add(hashMap1);

Map<String, Object> key1 = new HashMap<>();
key1.put("key1", "keyValue1");
Map<String, Object> value1 = new HashMap<>();
value1.put("value1", "valueValue1");
hashMap1.put(key1, value1);

Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String json = gson.toJson(myObject);
System.out.println(json);

此示例打印:

[{"{key1=keyValue1}":{"value1":"valueValue1"}}]

Update2 使用Pair(来自apache commons lang3)而不是HashMap。这更有意义。

List<Pair<Map<String, Object>, Map<String, Object>>> myObject = new ArrayList<>();
MutablePair<Map<String, Object>, Map<String, Object>> pair1 = new MutablePair<>();
myObject.add(pair1);

Map<String, Object> key1 = new HashMap<>();
key1.put("key1", "keyValue1");
Map<String, Object> value1 = new HashMap<>();
value1.put("value1", "valueValue1");
pair1.setLeft(key1);
pair1.setRight(value1);

Gson gson = new Gson();
String json = gson.toJson(myObject);
System.out.println(json);

打印:

[{"left":{"key1":"keyValue1"},"right":{"value1":"valueValue1"}}]

答案 2 :(得分:0)

ObjectMapper mapper = new ObjectMapper();
        Map<String, Object> map1=new HashMap<>();
        map1.put("key","value");
        map1.put("key1","value");
        map1.put("key2","value");
        map1.put("key3","value");
        HashMap<Map<String, Object>, Map<String, Object>> hash=new HashMap<>();

        List<HashMap<Map<String, Object>, Map<String, Object>>> lists=new ArrayList<>();
        hash.put(map1, map1);
        lists.add(hash);
        System.out.println(mapper.writeValueAsString(lists));