package com.example.jsonutil; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Locale; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class JsonUtil { public static <T> List<T> parseJson(Class<T> clzz, String jsonObjArray) { List<T> modelVOList = new ArrayList<T>(); try { JSONArray jsonArray = new JSONArray(jsonObjArray); if (jsonArray != null && jsonArray.length() > 0) { for (int i = 0; i < jsonArray.length(); i++) { T object = null; try { object = clzz.newInstance(); } catch (IllegalAccessException e1) { e1.printStackTrace(); } catch (InstantiationException e1) { e1.printStackTrace(); } JSONObject obj = jsonArray.getJSONObject(i); Field[] fields = object.getClass().getDeclaredFields(); for (int j = 0; j < fields.length; j++) { String fieldName = fields[j].getName(); String typeName = fields[j].getType().getCanonicalName().substring(fields[j].getType().getCanonicalName().lastIndexOf(".") + 1); Method jsonObjGetMethod = null; Method vehicleVOSetMethod = null; try { String jsonGetMethodName = "get" + typeName; if ("Integer".equals(typeName) || "BigDecimal".equals(typeName)) { jsonGetMethodName = "getInt"; } String firstChar = String.valueOf(fieldName.toUpperCase(Locale.US).charAt(0)); String vehicleVOSetMethodName = "set" + firstChar + fieldName.substring(1); jsonObjGetMethod = obj.getClass().getDeclaredMethod(jsonGetMethodName, new Class[]{String.class}); vehicleVOSetMethod = object.getClass().getDeclaredMethod(vehicleVOSetMethodName, new Class[]{fields[j].getType()}); Object valueObject = jsonObjGetMethod.invoke(obj, new Object[]{fieldName}); if (valueObject instanceof String) { vehicleVOSetMethod.invoke(object, new String[]{(String)valueObject}); } else if (valueObject instanceof Long) { vehicleVOSetMethod.invoke(object, new Long[]{(Long)valueObject}); } else if (valueObject instanceof Double) { vehicleVOSetMethod.invoke(object, new Double[]{(Double)valueObject}); } else if (valueObject instanceof Integer) { vehicleVOSetMethod.invoke(object, new Integer[]{(Integer)valueObject}); } else if (valueObject instanceof BigDecimal) { vehicleVOSetMethod.invoke(object, new BigDecimal[]{(BigDecimal)valueObject}); } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } modelVOList.add(object); } } } catch (JSONException e) { e.printStackTrace(); } return modelVOList; } }
使用范例:
People people = new People(); people.setId("111"); people.setAge(12); people.setName("zhelong"); people.setWeight(111.2); List<People> peopleList = new ArrayList<People>(); peopleList.add(people); peopleList.add(people); peopleList.add(people); Gson gson = new Gson(); String jsonString = gson.toJson(peopleList); List<People> peoples = JsonUtil.parseJson(People.class, jsonString); for (People p : peoples) { System.out.println(p.getId()); System.out.println(p.getName()); System.out.println(p.getWeight()); System.out.println(p.getAge()); System.out.println("------------------------------"); }