原文转帖于:https://www.cnblogs.com/teach/p/5791029.htmlhtml
在开发过程当中,常常须要和别的系统交换数据,数据交换的格式有XML、JSON等,JSON做为一个轻量级的数据格式比xml效率要高,XML须要不少的标签,这无疑占据了网络流量,JSON在这方面则作的很好,下面先看下JSON的格式。前端
从上面的两种格式能够看出对象格式和数组对象格式惟一的不一样则是在对象格式的基础上加上了[],再来看具体的结构,能够看出都是以键值对的形式出现的,中间以英文状态下的逗号(,)分隔。
在前端和后端进行数据传输的时候这种格式也是很受欢迎的,后端返回json格式的字符串,前台使用js中的JSON.parse()方法把JSON字符串解析为json对象,而后进行遍历,供前端使用。java
Jar包的版本号能够忽略,目前使用过多种版本均没发现什么问题json
commons-beanutils-1.9.1.jar后端
commons-collections-3.2.2.jar数组
commons-lang-2.6.jar网络
commons-logging-1.2.jar测试
ezmorph-1.0.6.jarthis
json-lib-2.4-jdk15.jar编码
建立一个实体类用于测试
package com.org.demo; public class Students { private String stuName; private String stuAge; private String address; public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public String getStuAge() { return stuAge; } public void setStuAge(String stuAge) { this.stuAge = stuAge; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String toString() { return "Student [stuName=" + stuName + ", stuAge=" + stuAge + ", address=" + address + "]"; } }
编写转换方法
// Java对象转JSON字符串 public static void javaToJsonStr() { Students students = new Students(); students.setStuName("张三"); students.setStuAge("28"); students.setAddress("广州天河区"); // 一、使用JSONObject JSONObject strJson = JSONObject.fromObject(students); // 二、使用JSONArray JSONArray strArray = JSONArray.fromObject(students); System.out.println("Java对象转JSON字符串"); System.out.println("JSON:" + strJson.toString()); System.out.println("Array:" + strArray.toString()); }
运行结果
Java对象转JSON字符串 JSON:{"address":"广州天河区","stuName":"张三","stuAge":"28"} Array:[{"address":"广州天河区","stuName":"张三","stuAge":"28"}]
public static void jsonStrToJava() { // 定义两种不一样格式的字符串 String objectStr = "{\"stuName\":\"张三\",\"stuAge\":\"28\",\"address\":\"广州天河区\"}"; String arrayStr = "[{\"stuName\":\"张三\",\"stuAge\":\"28\",\"address\":\"广州天河区\"}]"; // 一、使用JSONObject JSONObject jsonObject = JSONObject.fromObject(objectStr); Students students = (Students) JSONObject.toBean(jsonObject, Students.class); // 二、使用JSONArray JSONArray jsonArray = JSONArray.fromObject(arrayStr); // 得到jsonArray的第一个元素 Object o = jsonArray.get(0); JSONObject jsonObject2 = JSONObject.fromObject(o); Students students2 = (Students) JSONObject.toBean(jsonObject2, Students.class); System.out.println("JSON字符串转Java对象"); System.out.println("students:" + students); System.out.println("students2:" + students2); }
运行结果
JSON字符串转Java对象 students:Student [stuName=张三, stuAge=28, address=广州天河区] students2:Student [stuName=张三, stuAge=28, address=广州天河区]
//List转换为Json字符串 public static void listToJson() { Students stu = new Students(); stu.setStuName("张三"); stu.setStuAge("28"); stu.setAddress("广州天河区"); List<Students> lists = new ArrayList<Students>(); lists.add(stu); JSONArray listArray = JSONArray.fromObject(lists); System.out.println("listArray:" + listArray.toString()); }
运行结果
listArray:[{"address":"广州天河区","stuName":"张三","stuAge":"28"}]
//Json字符串转换为List对象 public static void jsonToList() { String arrayStr = "[{\"stuName\":\"张三\",\"stuAge\":\"28\",\"address\":\"广州天河区\"}]"; // 转化为list List<Students> list = (List<Students>) JSONArray.toList(JSONArray.fromObject(arrayStr), Students.class); for (Students svo : list) { System.out.println(svo); } // 转化为数组 Students[] stuArray = (Students[]) JSONArray.toArray(JSONArray.fromObject(arrayStr), Students.class); for (Students student : stuArray) { System.out.println(student); } }
运行结果
Student [stuName=张三, stuAge=28, address=广州天河区] Student [stuName=张三, stuAge=28, address=广州天河区]
//Map转Json字符串 public static void mapToJson() { Students stu = new Students(); stu.setStuName("张三"); stu.setStuAge("28"); stu.setAddress("广州天河区"); Map<String, Students> map = new HashMap<String, Students>(); map.put("first", stu); // 一、JSONObject JSONObject mapObject = JSONObject.fromObject(map); System.out.println("mapObject" + mapObject.toString()); // 二、JSONArray JSONArray mapArray = JSONArray.fromObject(map); System.out.println("mapArray:" + mapArray.toString()); }
运行结果
mapObject{"first":{"address":"广州天河区","stuName":"张三","stuAge":"28"}} mapArray:[{"first":{"address":"广州天河区","stuName":"张三","stuAge":"28"}}]
JSON字符串不能直接转化为map对象,要想取得map中的键对应的值须要别的方式
//Json字符串转Map public static void jsonToMap() { String strObject = "{\"first\":{\"address\":\"广州天河区\",\"stuAge\":\"28\",\"stuName\":\"张三\"}}"; // JSONObject JSONObject jsonObject = JSONObject.fromObject(strObject); Map<String, Object> map = new HashMap<String, Object>(); map.put("first", Students.class); // 使用了toBean方法,须要三个参数 MyBean my = (MyBean) JSONObject.toBean(jsonObject, MyBean.class, map); System.out.println(my.getFirst()); }
运行结果
Student [stuName=张三, stuAge=28, address=广州天河区]
MyBean对象代码
package com.org.demo; public class MyBean { private Students first; public Students getFirst() { return first; } public void setFirst(Students first) { this.first = first; } }
使用toBean()方法是传入了三个参数,第一个是JSONObject对象,第二个是MyBean.class,第三个是一个Map对象。经过MyBean能够知道此类中要有一个first的属性,且其类型为Students,要和map中的键和值类型对应,即,first对应键 first类型对应值的类型。 关于复杂的JSON串转化为java对象的内容,在下篇中会继续说明。 本篇,主要说明了java中的bean、list、map和JSON的互转。