2015-12-02 99 views
0

我有類字段Java的地圖<字符串,地圖<字符串,對象>>轉換爲字符串和背部

Map<String, Map<String, Object>> myMap; 

我需要實現它ORMlite,我想創建自定義的留存,但不知道將其轉換爲字符串並返回的好方法。

我留存類:

import com.j256.ormlite.field.FieldType; 
import com.j256.ormlite.field.SqlType; 
import com.j256.ormlite.field.types.StringType; 

import java.sql.SQLException; 
import java.util.Map; 

public class UserPersister extends StringType { 

private static UserPersister INSTANCE; 

private UserPersister() { 
    super(SqlType.STRING, new Class<?>[] {Map.class}); 
} 

public static UserPersister getInstance() { 
    if (INSTANCE == null) 
     INSTANCE = new UserPersister(); 
    return INSTANCE; 
} 

@Override 
public Object javaToSqlArg(FieldType fieldType, Object javaObject) throws SQLException { 
    Map<String, Map<String, Object>> map = (Map<String, Map<String, Object>>) javaObject; 
    return map != null ? getString(map) : null; 
} 

@Override 
public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) throws SQLException { 
    return sqlArg != null ? getFromString((String) sqlArg) : null; 
} 

private String getString(Map<String, Map<String, Object>> map) { 
    //implement 
} 

private Map<String, Map<String, Object>> getFromString(String json) { 
    //implement 
} 
+0

的可能的複製[如何HashMap的轉換在Java JSON對象(http://stackoverflow.com/問題/ 12155800/how-to-convert-hashmap-to-json-object-in-java) –

回答

0

或使用序列化,並將其編碼爲base64。

你採取任何解決方案,對象必須serializables(見下文)

結果不是可讀的,但它的安全和便於攜帶。

// encoding 
Map<Integer, Map<String,String>> mimss =new HashMap<Integer, Map<String,String>>(); 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(bos); 
oos.writeObject(mimss); 
oos.flush(); 
oos.close(); 
bos.close(); 
byte[] byteData = bos.toByteArray(); 
String serial= DatatypeConverter.printBase64Binary(byteData); 

// decoding 
byte[] byteData_reverse=DatatypeConverter.parseBase64Binary(serial); 
ByteArrayInputStream bais = new ByteArrayInputStream(byteData_reverse); 
Map<Integer, Map<String,String>> mimss_copy=(Map<Integer,Map<String,String>>) new ObjectInputStream(bais).readObject(); 

可序列化,類必須是這樣的

公共MyClass類實現Serializable

,你應該(非強制)宣佈內部

私有靜態最後長的serialVersionUID = 6569837232917408380L ;

如果有什麼事情在裏面也序列化,這是確定(標準類型,集合,...)

+0

謝謝你,這對我來說是好方法。 – llaerto

2

使用

new JSONObject(map); 

其它功能,你可以從它的文檔http://www.json.org/javadoc/org/json/JSONObject.html。但是,這隻適用於String,String映射,不適用於複雜的String,Object。

Gson也可以用來序列化任意複雜的對象。

這裏是你如何使用它:

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

GSON將集合自動轉換成JSON陣列。 Gson可以序列化私有字段並自動忽略瞬態字段

+0

Thx for response,我已經與Gson合作過,但不記得GSON庫可以將Map >和Map >來串和返回? – llaerto

相關問題