[英]Java Map<String, Map<String, Object>> convert to String and back
我有课场
Map<String, Map<String, Object>> myMap;
我需要为ORMlite实施它,我想创建自定义Persister,但不知道将其转换为字符串并返回的好方法。
我的坚持班:
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
}
采用
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可以序列化私有字段并自动忽略瞬态字段
或使用序列化,并将其编码为base64。
无论采用哪种解决方案,对象都必须是可序列化的(请参见下文)
结果不可读,但安全且可移植。
// 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;
如果里面也有可序列化的东西,那就没问题(标准类型是collections ...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.