package org.zstack.utils.gson;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.json.JSONArray;
import java.util.Collection;
public class JSONObjectUtil {
private static final Gson gson;
private static final Gson prettyGson;
static {
gson = new GsonBuilder().create();
prettyGson = new GsonBuilder().setPrettyPrinting().create();
}
public static <T, K extends Collection> K toCollection(String content, Class<K> collections, Class<T> clazz) {
try {
if (collections.isInterface()) {
throw new IllegalArgumentException(String.format("collections must be a concrete class, not interface[%s]", collections.getName()));
}
Collection c = collections.newInstance();
JSONArray jarr = new JSONArray(content);
for (int i=0; i<jarr.length(); i++) {
String objstr = jarr.getString(i);
if (String.class != clazz) {
c.add(gson.fromJson(objstr, clazz));
} else {
c.add(objstr);
}
}
return (K) c;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static <T> T toObject(String content, Class<T> clazz){
return gson.fromJson(content, clazz);
}
public static String toJsonString(Object obj) {
return gson.toJson(obj);
}
public static <T> T rehashObject(Object obj, Class<T> clazz) {
String str = toJsonString(obj);
return toObject(str, clazz);
}
public static String dumpPretty(Object obj) {
return prettyGson.toJson(obj);
}
}