整理下json数据与Java对象转换。 使用的jar包: ClassGrade类: import java.util.ArrayList; import java.util.List; public class ClassGrade&nbs……
使用的jar包:
ClassGrade类: import java.util.ArrayList; import java.util.List; public class ClassGrade { private String className; private List<Student> students = new ArrayList<Student>(); public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } } Student类: import java.util.Date; public class Student { private String userName; private int age; private Date brith; public Student() { super(); } public Student(String userName, int age, Date brith) { super(); this.userName = userName; this.age = age; this.brith = brith; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBrith() { return brith; } public void setBrith(Date brith) { this.brith = brith; } }
DateProcessor类:处理Java对象中java.util.Date类型的属性。
import java.text.SimpleDateFormat; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; /** * 转化器 * 将date类型转换成json规范的字符串 * @author Administrator * */ public class DateProcessor implements JsonValueProcessor{ private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); public DateProcessor(String formatStr) { if(formatStr != null) { this.format = new SimpleDateFormat(formatStr); } } @Override public Object processArrayValue(Object object, JsonConfig config) { return format.format(object); } @Override public Object processObjectValue(String str, Object object, JsonConfig config) { return format.format(object); } }
一般情况下,日期转化成json格式时,其格式比较复杂,比如一个生日:"brith":{"date":12,"day":2,"hours":11,"minutes":7,"month":0,"seconds":14,"time":1263265634870,"timezoneOffset":-480,"year":110},json会转成这样格式的,不是我们所熟悉的(yyyy-MM-dd等),使用DateProcessor可以转换成我们自定义的格式。
MyJSONUtils: import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import net.sf.ezmorph.object.DateMorpher; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.util.JSONUtils; public class MyJSONUtils { /** * 如果实体包含date类型数据,可以使用config处理 */ private static JsonConfig config = new JsonConfig(); static { DateProcessor processor = new DateProcessor("yyyy-MM-dd"); config.registerJsonValueProcessor(Date.class, processor); initDateFormats(); } /** * JSON数据日期格式转化成date类型的数据<br> * 前面提到DateProcessor是将date类型转成JSON格式数据<br> * 一个是Java对象-->JSON格式数据<br> * 一个是JSON格式数据-->Java对象 * * @author WF * @since 2015-2-4 上午9:54:31 */ private static void initDateFormats() { String[] dateFormats = new String[] { "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM/dd", "yyyyMMdd HH:mm:ss", "yyyyMMdd HH:mm", "yyyyMMdd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd", "yyyy年MM月dd日 HH:mm:ss", "yyyy年MM月dd日 HH:mm", "yyyy年MM月dd日" }; JSONUtils.getMorpherRegistry().registerMorpher( new DateMorpher(dateFormats)); } /** * 单个实体转化成JSON数据 * * @author WF * @since 2015-2-4 上午9:25:29 * @param object * @return */ public static String OneBeanToJSON(Object object) { JSONObject jsonObject = JSONObject.fromObject(object, config); return jsonObject.toString(); } /** * 数组或者集合转化成JSON数据 * * @author WF * @since 2015-2-4 上午9:25:51 * @param object * @return */ public static String ListToJSON(Object object) { JSONArray jsonArray = JSONArray.fromObject(object, config); return jsonArray.toString(); } /** * JSON数据转化成单个实体 * * @author WF * @since 2015-2-4 上午11:16:45 * @param jsonStr * @param clz * 返回的Java对象的Class * @param classMap * 返回的Java对象可能包含其他对象,比如说ClassGrade类中有List<Student> students, * 需要把Student类的Class塞到classMap里面, * key为ClassGrade的属性名(students),下同 * @return */ public static <T> Object JSONToOneBean(String jsonStr, Class<T> clz, Map<String, Class<?>> classMap) { JSONObject jsonObject = JSONObject.fromObject(jsonStr); Object object = JSONObject.toBean(jsonObject, clz, classMap); return object; } /** * JSON数据转化成List集合 * * @author WF * @since 2015-2-4 上午10:24:55 * @param jsonStr * @param clz * @param classMap * @return */ public static <T> List<T> JSONToList(String jsonStr, Class<T> clz, Map<String, Class<?>> classMap) { List<T> results = new ArrayList<T>(); T[] ts = JSONToArray(jsonStr, clz, classMap); if (ts != null) { for (T t : ts) { results.add(t); } } return results; } /** * JSON数据转化成数组集合 * * @author WF * @since 2015-2-4 上午10:25:23 * @param jsonStr * @param clz * @param classMap * @return */ @SuppressWarnings("unchecked") public static <T> T[] JSONToArray(String jsonStr, Class<T> clz, Map<String, Class<?>> classMap) { JSONArray jsonArray = JSONArray.fromObject(jsonStr); T[] ts = null; try { Object object = JSONArray.toArray(jsonArray, clz, classMap); ts = (T[]) object; } catch (Exception e) { e.printStackTrace(); } return ts; } } 下面给出一个Map与JSON相互转化的例子: import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; public class Test { public static void main(String[] args) { List<ClassGrade> grades = new ArrayList<ClassGrade>(); ClassGrade grade = new ClassGrade(); ClassGrade grade2 = new ClassGrade(); List<Student> students = new ArrayList<Student>(); for (int i = 0; i < 2; i++) { Student user = new Student("admin" + i, i, DateUtils.createDate(2010, i+1, 12+i)); students.add(user); } grade.setClassName("一班"); grade.setStudents(students); grade2.setClassName("二班"); grade2.setStudents(students); grades.add(grade); grades.add(grade2); ClassGrade[] gradesArrs = new ClassGrade[2]; gradesArrs[0] = new ClassGrade(); gradesArrs[0].setClassName("一班"); gradesArrs[0].setStudents(students); gradesArrs[1] = new ClassGrade(); gradesArrs[1].setClassName("二班"); gradesArrs[1].setStudents(students); Map<String, Object> map = new HashMap<String, Object>(); map.put("grade", grade); map.put("grades", grades); map.put("student", students.get(0)); map.put("students", students); String jsonStr = MyJSONUtils.OneBeanToJSON(map); System.out.println("Map-->JSON:" + jsonStr); Map<String, Class<?>> classMap = new HashMap<String, Class<?>>(); classMap.put("grade", ClassGrade.class); classMap.put("grades", ClassGrade.class); classMap.put("student", Student.class); classMap.put("students", Student.class); Map<String, Object> resultMap = (Map<String, Object>) MyJSONUtils.JSONToOneBean(jsonStr, Map.class, classMap); System.out.println("========================================================"); ClassGrade grade3 = (ClassGrade) resultMap.get("grade"); System.out.println("班级:" + grade3.getClassName()); List<Student> list = grade3.getStudents(); for (Student student : list) { System.out.println(student.getUserName() + ":" + format(student.getBrith())); } System.out.println("========================================================"); List<ClassGrade> gradesResult = (List<ClassGrade>) resultMap.get("grades"); for (ClassGrade classGrade : gradesResult) { System.out.println("班级:" + classGrade.getClassName()); List<Student> list2 = classGrade.getStudents(); for (Student student : list2) { System.out.println(student.getUserName() + ":" + format(student.getBrith())); } } System.out.println("========================================================"); Student student = (Student) resultMap.get("student"); System.out.println(student.getUserName() + ":" + format(student.getBrith())); System.out.println("========================================================"); List<Student> studentsResult = (List<Student>) resultMap.get("students"); for (Student student2 : studentsResult) { System.out.println(student2.getUserName() + ":" + format(student2.getBrith())); } System.out.println("========================================================"); } public static String format(Date date) { String result = null; if (date != null) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); result = format.format(date); } return result; } }
控制台输出:
Map–>JSON:{"students":[{"age":0,"brith":"2010-01-12","userName":"admin0"},{"age":1,"brith":"2010-02-13","userName":"admin1"}],"student":{"age":0,"brith":"2010-01-12","userName":"admin0"},"grade":{"className":"一班","students":[{"age":0,"brith":"2010-01-12","userName":"admin0"},{"age":1,"brith":"2010-02-13","userName":"admin1"}]},"grades":[{"className":"一班","students":[{"age":0,"brith":"2010-01-12","userName":"admin0"},{"age":1,"brith":"2010-02-13","userName":"admin1"}]},{"className":"二班","students":[{"age":0,"brith":"2010-01-12","userName":"admin0"},{"age":1,"brith":"2010-02-13","userName":"admin1"}]}]}
========================================================
班级:一班
admin0:2010-01-12
admin1:2010-02-13
========================================================
班级:一班
admin0:2010-01-12
admin1:2010-02-13
班级:二班
admin0:2010-01-12
admin1:2010-02-13
========================================================
admin0:2010-01-12
========================================================
admin0:2010-01-12
admin1:2010-02-13
========================================================
原文链接:https://blog.csdn.net/op635915376/java/article/details/43483385
还没有评论呢,快来抢沙发~