/** * Created by xiaoqi on 2017/7/19. */ public class JSONUtils { public static String ObjToJson(Object obj) { String json = ""; if (obj != null) { StringBuffer sb = new StringBuffer(); if (obj instanceof List) { sb.append("["); List<?> list = (List<?>) obj; for (int i = 0; i < list.size(); i++) { parseObjToJson(sb, list.get(i), true); if (i < list.size() - 1) { sb.append(","); } } } else { parseObjToJson(sb, obj, false); } json = sb.toString(); } return json; } private static void parseObjToJson(StringBuffer sb, Object obj, boolean isFromList) { if (sb != null && obj != null) { if (!isFromList) { sb.append("{"); } List<Field> fields = new ArrayList<>(); getAllFields(obj.getClass(), fields); if (!fields.isEmpty()) { for (int i = 0; i < fields.size(); i++) { Field field = fields.get(i); Object fieldValue = null; String fieldName = field.getName(); try { fieldValue = field.get(obj); } catch (IllegalAccessException e) { e.printStackTrace(); } if (fieldValue != null) { sb.append("\""); sb.append(fieldName); sb.append("\":"); if (fieldValue instanceof Integer || fieldValue instanceof Double || fieldValue instanceof Long || fieldValue instanceof Boolean) { sb.append(fieldValue.toString()); } else if (fieldValue instanceof String || fieldValue instanceof UUID || fieldValue instanceof Enum) { sb.append("\""); sb.append(fieldValue.toString()); sb.append("\""); } else if (fieldValue instanceof List) { parseListToJson(sb, fieldValue); } else { parseObjToJson(sb, fieldValue, false); } if (i != (fields.size() - 1)) {//排除最后一个字段加逗号 sb.append(","); } } } } else { if (obj instanceof Integer || obj instanceof Double || obj instanceof Long || obj instanceof Boolean) { sb.append(obj.toString()); } else if (obj instanceof String || obj instanceof UUID) { sb.append("\""); sb.append(obj.toString()); sb.append("\""); } } if (!isFromList) { sb.append("}"); } } } private static void parseListToJson(StringBuffer sb, Object fieldValue) { if (sb != null && fieldValue != null) { List list = (List) fieldValue; sb.append("["); for (int i = 0; i < list.size(); i++) { parseObjToJson(sb, list.get(i), true); if (i != (list.size() - 1)) { sb.append(","); } } sb.append("]"); } } private static void getAllFields(Class<?> clazz, List<Field> fields) { if (clazz == null) { return; } if (fields == null) { fields = new ArrayList<>(); } Field[] declaredFields = clazz.getFields(); for (Field field : declaredFields) { if (!Modifier.isFinal(field.getModifiers())) { fields.add(field); } } } public static <T> T JsonToObj(JSONObject json, Class<T> clazz) throws InstantiationException, ClassNotFoundException, IllegalAccessException { Object entity = clazz.newInstance(); Iterator<?> keys = json.keys(); while (keys.hasNext()) { try { Object key = keys.next(); Object value = json.get(key.toString()); Field field = clazz.getField(key.toString()); field.setAccessible(true); try { field.set(entity, value); } catch (IllegalArgumentException e) { Class fieldClazz = Class.forName(field.getType().getCanonicalName()); if(fieldClazz.isEnum()){ field.set(entity, Enum.valueOf(fieldClazz, value.toString())); }else if("UUID".equals(fieldClazz.getSimpleName())){ field.set(entity, UUID.fromString(value.toString())); }else if("ArrayList".equals(fieldClazz.getSimpleName())){ JSONArray jsonArray = (JSONArray) value; ArrayList<String> arrayList = new ArrayList<>(); for(int i = 0; i < jsonArray.length(); i++){ String s = (String) jsonArray.get(i); arrayList.add(s); } field.set(entity, arrayList); }else{ //TODO throw new RuntimeException("fieldClazz is not added"); } } } catch (NoSuchFieldException | JSONException e) { e.printStackTrace(); } } return (T)entity; } }
通过反射生成JSON字符串,以及解析JSON字符串到对象
最新推荐文章于 2021-02-21 11:02:34 发布