Java之JSON操作(gson)
使用gson包操作JSON数据。
依赖包:gson-2.8.2.jar
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
代码如下:
1 package json.gson; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.Map; 6 7 import com.google.gson.Gson; 8 import com.google.gson.JsonArray; 9 import com.google.gson.JsonElement; 10 import com.google.gson.JsonParser; 11 import com.google.gson.reflect.TypeToken; 12 13 /** 14 * 使用gson来操作Json 15 * 1.对象实体类,list,map,等转化成----->jsonString(进行数据传递) 16 * 2.jsonString转化成----->对象实体类,list,map(解析返回的数据) 17 * 3.我使用的是gson-2.2.2.jar 18 * 19 */ 20 public class JsonUtil { 21 22 23 private static Gson gson = null; 24 25 static { 26 if (gson == null) { 27 gson = new Gson(); 28 } 29 } 30 31 32 /** 33 * 将object对象转成json字符串(jsonString) 34 * boject 可以是List,也可以是Bean(对象类型) 35 * 36 * @param object 37 */ 38 public static String GsonString(Object object) { 39 String gsonString = null; 40 if (gson != null) { 41 gsonString = gson.toJson(object); 42 } 43 return gsonString; 44 } 45 46 47 /** 48 * 入参是json对象 49 * 将gsonObjectString转成泛型bean(实体类) 50 * 51 * @param gsonString 52 */ 53 public static <T> T GsonToBean(String gsonString, Class<T> cls) { 54 T t = null; 55 if (gson != null) { 56 t = gson.fromJson(gsonString, cls); 57 } 58 return t; 59 } 60 61 /** 62 * 这里的入参是json数组类型的字符串 63 * jsonArrayString转成list 64 */ 65 public static <T> List<T> jsonArrayToList(String json, Class<T> cls) { 66 Gson gson = new Gson(); 67 List<T> list = new ArrayList<T>(); 68 JsonArray array = new JsonParser().parse(json).getAsJsonArray(); 69 for (final JsonElement elem : array) { 70 list.add(gson.fromJson(elem, cls)); 71 } 72 return list; 73 } 74 75 76 /** 77 * List对泛型没有要求 78 * jsonString转成list中有map的 79 */ 80 public static <T> List<Map<String, T>> GsonToListMap(String gsonString) { 81 List list = null; 82 if (gson != null) { 83 list = gson.fromJson(gsonString, 84 new TypeToken<List>() { 85 }.getType()); 86 } 87 return list; 88 } 89 90 /** 91 * 要求List中全部是Map 92 * jsonString转成list中有map的 93 */ 94 public static <T> List<Map<String, T>> GsonToListMaps(String gsonString) { 95 List<Map<String, T>> list = null; 96 if (gson != null) { 97 list = gson.fromJson(gsonString, 98 new TypeToken<List<Map<String, T>>>() { 99 }.getType()); 100 } 101 return list; 102 } 103 104 105 /** 106 * jsonString转成map的 107 */ 108 public static <T> Map<String, T> GsonToMaps(String gsonString) { 109 Map<String, T> map = null; 110 if (gson != null) { 111 map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() { 112 }.getType()); 113 } 114 return map; 115 } 116 117 /** 118 * map转jsonString,指定了Map类型 119 */ 120 public static String MapToJson(Map<String, Object> map) { 121 String str = null; 122 if (gson != null) { 123 str = gson.toJson(map); 124 } 125 return str; 126 } 127 128 }
测试代码:
1 package json.gson; 2 3 import bean.User; 4 5 public class TestGson { 6 7 private static User user = null; 8 9 static { 10 user = new User("tom", 25, "NO.1 street"); 11 } 12 13 public static void main(String[] args) { 14 String jsonStr = JsonUtil.GsonString(user); 15 System.out.println(jsonStr); 16 17 String jsonStr2 = "{\"name\":\"tom\",\"age\":25,\"address\":\"NO.1 street\"}"; 18 User user2 = JsonUtil.GsonToBean(jsonStr2, User.class); 19 System.out.println(user2); 20 } 21 }
运行结果:
{"name":"tom","age":25,"address":"NO.1 street"}
User[name='tom', age=25, address='NO.1 street']