通过反射生成JSON字符串,以及解析JSON字符串到对象
来源:互联网 发布:Affinity photo mac 编辑:程序博客网 时间:2024/06/08 06:13
/** * 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; }}
阅读全文
0 0
- 通过反射生成JSON字符串,以及解析JSON字符串到对象
- 通过Json和Gson,快速生成和解析json字符串
- Json字符串对象解析
- Android开发:Json字符串到Json对象万能解析器
- 采用反射把json字符串解析到JavaBean
- Json字符串生成与解析
- JSON之生成JSON字符串和解析
- fastjson--Gson生成Json字符串,并且解析Json字符串生成对象
- JsonObject生成Json字符串,并且解析为对象-----JsonReader解析Json字符串
- Json:scala 解析json字符串,变成对象
- json格式字符串到json对象转化
- JSON由字符串到JSON对象
- javascritp 传入对象或数组生成json字符串 解析json字符串
- JSON-JSON字符串转换成JSON对象、JSON对象数组、java实体类以及保存到List列表中
- Android解析Json字符串和生成json字符串
- 反射实现对象转json格式字符串
- JSON基础以及JSON字符串转换为JSON对象
- Json转model对象,model转json,解析json字符串
- Cordova 手机App禁止横竖屏转换
- 多线程
- border-radius兼容iPhone的问题
- java对象的初始化和回收
- gradle项目deploy出现编码GBK的不可映射字符
- 通过反射生成JSON字符串,以及解析JSON字符串到对象
- 解决“只能通过Chrome网上应用商店安装该程序”的方法
- oh,my goddess-OJ
- Huffman树的基本操作
- 字段跟属性区别
- React-Native中AsyncStorage的用法
- Jersey调用Webservice Restful接口
- Unix/Linux编程实践教程–书评
- Cassandra nodetool常用操作