在IDEA中的springboot項目里寫的一個測試例子,新建User類,四個字段,Long id , String password,String userName,int age; 以及帶參構造,toString方法
在pom.xml中添加 net.sf.json-lib 依賴:
1 <!-- 對象轉json依賴包 --> 2 <!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib --> 3 <dependency> 4 <groupId>net.sf.json-lib</groupId> 5 <artifactId>json-lib</artifactId> 6 <version>2.4</version> 7 <!--不加下面這一項會報錯,是因為json-lib支持版本是jdk1.5,所以要指定下版本--> 8 <classifier>jdk15</classifier> 9 </dependency>
json轉換測試類:
1 package com.lch.springboot04.jsonparse; 2 3 import com.lch.springboot04.domain.User; 4 import net.sf.json.JSONArray; 5 import net.sf.json.JSONObject; 6 7 import java.util.*; 8 9 /** 10 * 對象轉換為json數據測試,通過net.sf.json-lib.jar 11 */ 12 public class JsonParse { 13 14 public static void main(String[] args) { 15 /** 16 * object 轉為json數組 :數組,對象,map,list,list<Map<String,Object>> 都可以; 17 * object 轉為json字符串:只有 自定義對象 和 map可以轉換,其他都不能這樣轉; 18 */ 19 20 String[] arr = {"a", "b", "c"}; 21 System.out.println("string數組轉為json數組" + JSONArray.fromObject(arr)); //["a","b","c"] 22 // System.out.println("string數組轉為json字符串"+ JSONObject.fromObject(arr).toString()); //無法轉換:'object' is an array. Use JSONArray instead 23 24 //java自定義對象轉json 25 User jack = new User("123", "jack", 18); 26 System.out.println("Java對象轉為json數組" + JSONArray.fromObject(jack)); 27 //結果:[{"age":18,"id":0,"password":"123","userName":"jack"}] 28 System.out.println("Java對象轉為json字符串" + JSONObject.fromObject(jack).toString()); 29 //結果:{"age":18,"id":0,"password":"123","userName":"jack"} 30 31 //list轉json 32 User tom = new User("456", "tom", 20); 33 List<User> userList = new ArrayList<>(); 34 userList.add(jack); 35 userList.add(tom); 36 System.out.println("list轉為json數組" + JSONArray.fromObject(userList)); 37 // 結果:list轉為json數組[{"age":18,"id":0,"password":"123","userName":"jack"},{"age":20,"id":0,"password":"456","userName":"tom"}] 38 // System.out.println("list轉為json字符串"+ JSONObject.fromObject(userList).toString()); //不能轉為json字符串 39 40 // list<Map<String,Object>> 轉json 41 List<Map<String, Object>> mapList = new ArrayList(); 42 Map<String, Object> m1 = new HashMap<String, Object>(); 43 m1.put("jack", jack); 44 m1.put("tom", tom); 45 Map<String, Object> m2 = new HashMap<String, Object>(); 46 m2.put("alex", new User("789", "alex", 20)); 47 mapList.add(m1); 48 mapList.add(m2); 49 System.out.println("map轉json數組" + JSONArray.fromObject(m2)); 50 // 轉換結果:[{"alex":{"age":20,"id":0,"password":"789","userName":"alex"}}] 51 System.out.println("map轉json字符串" + JSONObject.fromObject(m2)); 52 //結果:{"alex":{"age":20,"id":0,"password":"789","userName":"alex"}} 53 System.out.println(" list<Map<String,Object>> 轉json數組" + JSONArray.fromObject(mapList)); 54 // 結果:[{"tom":{"age":20,"id":0,"password":"456","userName":"tom"},"jack":{"age":18,"id":0,"password":"123","userName":"jack"}},{"alex":{"age":20,"id":0,"password":"789","userName":"alex"}}] 55 // System.out.println(" list<Map<String,Object>> 轉json字符串"+JSONObject.fromObject(mapList));//不能轉,'object' is an array. Use JSONArray instead 56 57 /** 58 * json字符串轉map 59 */ 60 /* String jsonStr = "{\"alex\":{\"age\":20,\"id\":0,\"password\":\"789\",\"userName\":\"alex\"}}"; 61 Map<String,Object> map = jsonToMap(JSONObject.fromObject(jsonStr).get("alex").toString()); 62 System.out.println("json字符串轉map:"+map.get("age"));*/ 63 // {"total":2,"items":[{"age":15,"id":1,"name":"jack"},{"age":16,"id":2,"name":"tom"}]} 64 String jsonStr2 = "{\"total\":2,\"items\":[{\"age\":15,\"id\":1,\"userName\":\"jack\"},{\"age\":16,\"id\":2,\"userName\":\"tom\"}]}"; 65 Map<String, Object> stringObjectMap = jsonToMap(jsonStr2); 66 for (Map.Entry<String, Object> entry : stringObjectMap.entrySet()) { 67 System.out.println(entry.getKey() + "--" + entry.getValue()); 68 } 69 /**輸出結果: 70 * total--2 71 items--[{"age":15,"id":1,"userName":"jack"},{"age":16,"id":2,"userName":"tom"}] 72 */ 73 74 // jsonstr轉list,list中存放Java Bean 75 String jsonStr3 = JSONObject.fromObject(jsonStr2).get("items").toString(); 76 System.out.println("jsonStr3=" + jsonStr3); 77 List list = jsonStr2ObjectList(jsonStr3, User.class); 78 for (Object u : list) { 79 System.out.println(u); 80 } 81 /** 82 * 輸出User{id=1, password='null', userName='jack', age=15} 83 User{id=2, password='null', userName='tom', age=16} 84 */ 85 86 } 87 88 /** 89 * json字符串轉map 90 * 91 * @param jsonStr 92 * @return 93 */ 94 public static Map<String, Object> jsonToMap(String jsonStr) { 95 JSONObject jsonObject = JSONObject.fromObject(jsonStr); //首先轉換為 JSONObject 96 Iterator<String> nameItr = jsonObject.keys();//獲取jsonObject的keySet()的迭代器 97 String key;//接收key值 98 Map<String, Object> outMap = new HashMap<>(); //存放轉換結果 99 while (nameItr.hasNext()) { 100 key = nameItr.next(); 101 outMap.put(key, jsonObject.get(key)); 102 } 103 return outMap; 104 } 105 106 /** 107 * JSONObject類中keys()方法默認返回jsonObject的keyset的迭代器 108 * public Iterator keys() { 109 * this.verifyIsNull(); 110 * return this.keySet().iterator(); 111 * } 112 */ 113 114 /** json轉list,list中存放JavaBean 115 * @param jsonStr 要轉換的json字符串 116 * @param clazz javaBean的Class對象 117 * @return 118 */ 119 public static List jsonStr2ObjectList(String jsonStr, Class clazz) { 120 JSONArray array = JSONArray.fromObject(jsonStr); 121 List list = new ArrayList(); 122 for (Iterator itr = array.iterator(); itr.hasNext(); ) { 123 JSONObject jsonObject = (JSONObject) itr.next(); 124 //取出json字符串中的一個子字符串,轉換為指定類型的JavaBean 125 Object bean = JSONObject.toBean(jsonObject, clazz); 126 list.add(bean); 127 } 128 return list; 129 } 130 }
結果: