2016-03-02 48 views
1

用這個表:爪哇 - 轉換配合物列表#的toString到列表

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

,我需要把它保存到一個文本文件中。

於是用列表#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}}] 

我怎樣才能將其轉換回一個列表?

謝謝!

+1

看來你需要寫一個實用程序方法,以便在扭轉這一工作。 –

+0

請澄清在保存到文件或從文件和創建列表讀取字符串期間是否有問題? – sphinks

+0

將字符串轉換回列表 –

回答

2

你最好使用像JSON或YAML格式。 Usng toString()表示存在太多的角落案例,例如出現在某個鍵或值中的={},

0

toString()方法會生成一種用於記錄和調試的格式,而不是用於序列化和反序列化。

我建議將您的對象轉換爲json格式(其他格式,如xml也可以),並使用諸如「Gson」之類的json庫進行轉換。

例子,你如何可以將對象轉換成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); 

此示例prin TS:

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

UPDATE2使用對(來自Apache的公共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"}}] 
+0

謝謝!不錯的主意,我會用JSON,但我需要轉換每一個地圖,或者我可以只使用Gson#toJson在列表中: List ,Map >> –

+0

You可以將你的整個列表/地圖結構傳遞給gson.toJson() - 這很簡單。轉換回來比較困難,你可以使用fromJson()方法,或者編寫你自己的一系列嵌套循環,從json dom構建你的對象。 –

+0

我嘗試使用Gson#toJson,但在Json中,列表中的所有元素都是空的。 –

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));