手写List转换成Json
完全自己想法,也是初来乍到,若有不足之处,请多多指教。Thanks
废话不多说,程序猿就喜欢代码
那么久直接来代码吧!!!!!!!!!!!!!!!!!!!!
package work;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.alibaba.fastjson.JSONObject;
public class JsonUtils<T> {
private static final String COLON = "\"";
private static final String COLON_MARK = "\":";
public static void main(String[] args) throws Exception {
List<Object> list = new ArrayList<>();
list.add(new Person("Kang", 18));
list.add(new Person("Kang", 18));
list.add(new Person("Kang", 18));
list.add("kang");
Map map = new HashMap();
map.put("abc", "123");
map.put("Kang", new Person("Kang", 18));
list.add(map);
// Using alibaba JSONObject compare to myself result
String jsonString = JSONObject.toJSONString(list);
System.out.println(jsonString);
// I design list parse to json string
String parseListToJson = new JsonUtils<Object>().parseListToJson(list);
System.out.println(parseListToJson);
}
@SuppressWarnings("unchecked")
public String parseBeanToJson(T t) throws Exception {
if (t == null) {
return "";
}
String jsonStr = "{";
Class<? extends Object> clazz = t.getClass();
if (isBasics(clazz) || clazz == String.class) {
return COLON + t.toString() + COLON;
}
if (clazz.isAssignableFrom(HashMap.class)) {
Map m = (Map)t;
Set keySet = m.keySet();
int i = 0;
for (Object object : keySet) {
jsonStr = jsonStr + COLON + object + COLON_MARK;
jsonStr += parseBeanToJson((T) m.get(object));
jsonStr = addComma(i, keySet.size(), jsonStr) != null ? addComma(i, keySet.size(), jsonStr) : jsonStr;
i++;
}
jsonStr += "}";
return jsonStr;
}
Field[] declaredFields = clazz.getDeclaredFields();
for (int i = 0; i < declaredFields.length; i++) {
Field field = declaredFields[i];
jsonStr += COLON + field.getName() + COLON_MARK;
field.setAccessible(true);
if (List.class == field.getType()) {
jsonStr += parseListToJson((T) field.get(t));
} else if (String.class == field.getType()) {
String value = field.get(t).toString();
jsonStr += COLON + value + COLON;
} else if (isBasics(field.getType())) {
String value = field.get(t).toString();
jsonStr += value;
}
jsonStr = addComma(i, declaredFields.length, jsonStr) != null ? addComma(i, declaredFields.length, jsonStr) : jsonStr;
}
jsonStr += "}";
return jsonStr;
}
public String parseListToJson(T t) throws Exception {
if (t == null) {
return "";
}
String jsonStr = "[";
List list = (List) t;
for (int j = 0; j < list.size(); j++) {
String subJson = parseBeanToJson((T) list.get(j));
jsonStr += subJson;
jsonStr = addComma(j, list.size(), jsonStr) != null ? addComma(j, list.size(), jsonStr) : jsonStr;
}
jsonStr += "]";
return jsonStr;
}
private String addComma(int i, int size, String jsonStr) {
if (i < size - 1) {
return jsonStr += ",";
}
return null;
}
private boolean isBasics(Class<?> type) {
if (type == int.class || type == byte.class || type == short.class || type == long.class || type == float.class
|| type == double.class || type == char.class || type == boolean.class) {
return true;
} else {
return false;
}
}
}
class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
}