Java-JSON

 

 1         <!-- fastjson -->
 2         <dependency>
 3             <groupId>com.alibaba</groupId>
 4             <artifactId>fastjson</artifactId>
 5             <version>1.2.47</version>
 6         </dependency>
 7 
 8         <!-- gson -->
 9         <dependency>
10             <groupId>com.google.code.gson</groupId>
11             <artifactId>gson</artifactId>
12             <version>2.8.2</version>
13         </dependency>

fastJson

  1 import static com.alibaba.fastjson.util.TypeUtils.castToBoolean;
  2 
  3 import java.io.Serializable;
  4 import java.lang.reflect.Type;
  5 import java.util.ArrayList;
  6 import java.util.Collection;
  7 import java.util.Iterator;
  8 import java.util.List;
  9 import java.util.ListIterator;
 10 import java.util.RandomAccess;
 11 
 12 import com.alibaba.fastjson.JSON;
 13 import com.alibaba.fastjson.JSONObject;
 14 import com.alibaba.fastjson.parser.ParserConfig;
 15 import com.alibaba.fastjson.util.TypeUtils;
 16 
 17 /**
 18  * JSONArray源码
 19  */
 20 public class JSONArray1 extends JSON implements List<Object>, Cloneable, RandomAccess, Serializable {
 21 
 22     private final List<Object> list;
 23     protected transient Object relatedArray;
 24     protected transient Type   componentType;
 25     //使用无参构造创建JSONArray的时候,初始化一个空arrayList
 26     public JSONArray1(){
 27         this.list = new ArrayList<Object>();
 28     }
 29     //使用有参构造,将参数list赋值给JSONArray的属性list
 30     public JSONArray1(List<Object> list){
 31         this.list = list;
 32     }
 33     //使用无参构造,创建指定参数大小的list
 34     public JSONArray1(int initialCapacity){
 35         this.list = new ArrayList<Object>(initialCapacity);
 36     }
 37 
 38     //set和get方法
 39     public Object getRelatedArray() {return relatedArray;}
 40     public void setRelatedArray(Object relatedArray){this.relatedArray = relatedArray;}
 41     public Type getComponentType() {return componentType;}
 42     public void setComponentType(Type componentType){this.componentType = componentType;}
 43 
 44     //获取存储数据的list的大小
 45     public int size() {
 46         return list.size();
 47     }
 48     //判断存储数据的list是否为空
 49     public boolean isEmpty() {
 50         return list.isEmpty();
 51     }
 52     //判断存储数据的list是否包含某个对象
 53     public boolean contains(Object o) {
 54         return list.contains(o);
 55     }
 56     //获取存储数据的list的迭代器对象
 57     public Iterator<Object> iterator() {
 58         return list.iterator();
 59     }
 60     //将存储数据的list转成数组
 61     public Object[] toArray() {
 62         return list.toArray();
 63     }
 64     //将参数中的数据,添加list中,并将list转成参数中数组的类型的数组返回
 65     public <T> T[] toArray(T[] a) {
 66         return list.toArray(a);
 67     }
 68     //向存储数据的list中添加元素,添加成功返回true
 69     public boolean add(Object e) {
 70         return list.add(e);
 71     }
 72     //向存储数据的list中添加元素,返回该JSONArray对象
 73     public JSONArray1 fluentAdd(Object e) {
 74         list.add(e);
 75         return this;
 76     }
 77     //从存储数据的list中移除指定元素,移除成功返回true
 78     public boolean remove(Object o) {
 79         return list.remove(o);
 80     }
 81     //从存储数据的list中移除指定元素,返回该JSONArray对象
 82     public JSONArray1 fluentRemove(Object o) {
 83         list.remove(o);
 84         return this;
 85     }
 86     //判断list中是否包含指定集合中的所有元素
 87     public boolean containsAll(Collection<?> c) {
 88         return list.containsAll(c);
 89     }
 90     //添加指定集合中的所有元素到list中,添加成功返回true
 91     public boolean addAll(Collection<? extends Object> c) {
 92         return list.addAll(c);
 93     }
 94     //添加指定集合中的所有元素到list中,返回该JSONArray对象
 95     public JSONArray1 fluentAddAll(Collection<? extends Object> c) {
 96         list.addAll(c);
 97         return this;
 98     }
 99     //添加指定集合中的所有元素到list中指定下标处,添加成功返回true
100     public boolean addAll(int index, Collection<? extends Object> c) {
101         return list.addAll(index, c);
102     }
103     //添加指定集合中的所有元素到list中指定下标处,返回该JSONArray对象
104     public JSONArray1 fluentAddAll(int index, Collection<? extends Object> c) {
105         list.addAll(index, c);
106         return this;
107     }
108     //从list中删除指定集合中的所有元素,删除成功返回true
109     public boolean removeAll(Collection<?> c) {
110         return list.removeAll(c);
111     }
112     //从list中删除指定集合中的所有元素,返回该JSONArray对象
113     public JSONArray1 fluentRemoveAll(Collection<?> c) {
114         list.removeAll(c);
115         return this;
116     }
117     
118     public boolean retainAll(Collection<?> c) {
119         return list.retainAll(c);
120     }
121 
122     public JSONArray1 fluentRetainAll(Collection<?> c) {
123         list.retainAll(c);
124         return this;
125     }
126     //清空list集合
127     public void clear() {
128         list.clear();
129     }
130     //清空list并返回JSONArray对象
131     public JSONArray1 fluentClear() {
132         list.clear();
133         return this;
134     }
135     //添加元素到List的指定下标处
136     public Object set(int index, Object element) {
137         if (index == -1) {
138             list.add(element);
139             return null;
140         }
141         
142         if (list.size() <= index) {
143             for (int i = list.size(); i < index; ++i) {
144                 list.add(null);
145             }
146             list.add(element);
147             return null;
148         }
149         
150         return list.set(index, element);
151     }
152     //添加元素到指定下标处,返回JSONArray对象
153     public JSONArray1 fluentSet(int index, Object element) {
154         set(index, element);
155         return this;
156     }
157     //添加元素到指定下标
158     public void add(int index, Object element) {
159         list.add(index, element);
160     }
161     //添加元素到指定下标处,返回JSONArray对象
162     public JSONArray1 fluentAdd(int index, Object element) {
163         list.add(index, element);
164         return this;
165     }
166     //删除并返回指定下标处的元素
167     public Object remove(int index) {
168         return list.remove(index);
169     }
170     //删除指定下标处的元素,返回JSONArray对象
171     public JSONArray1 fluentRemove(int index) {
172         list.remove(index);
173         return this;
174     }
175     //获取元素第一次出现的下标
176     public int indexOf(Object o) {
177         return list.indexOf(o);
178     }
179     //获取元素最后一次出现的下标
180     public int lastIndexOf(Object o) {
181         return list.lastIndexOf(o);
182     }
183     //获取list特有的迭代器对象
184     public ListIterator<Object> listIterator() {
185         return list.listIterator();
186     }
187     //根据下标获取list特有的迭代器对象
188     public ListIterator<Object> listIterator(int index) {
189         return list.listIterator(index);
190     }
191     //截取List
192     public List<Object> subList(int fromIndex, int toIndex) {
193         return list.subList(fromIndex, toIndex);
194     }
195     //根据下标获取元素
196     public Object get(int index) {
197         return list.get(index);
198     }
199     //根据下标获取元素,并转成JSONObject对象返回
200     public JSONObject getJSONObject(int index) {
201         Object value = list.get(index);
202 
203         if (value instanceof JSONObject) {
204             return (JSONObject) value;
205         }
206 
207         return (JSONObject) toJSON(value);
208     }
209     //根据下标获取元素,并转成JSONArray对象返回
210     public JSONArray1 getJSONArray(int index) {
211         Object value = list.get(index);
212 
213         if (value instanceof JSONArray1) {
214             return (JSONArray1) value;
215         }
216 
217         return (JSONArray1) toJSON(value);
218     }
219     //根据下标获取对象并装成指定的对象类型
220     public <T> T getObject(int index, Class<T> clazz) {
221         Object obj = list.get(index);
222         return TypeUtils.castToJavaBean(obj, clazz);
223     }
224     //根据下标获取元素,并转成Boolean
225     public Boolean getBoolean(int index) {
226         Object value = get(index);
227         if (value == null) {
228             return null;
229         }
230         return castToBoolean(value);
231     }
232     //根据下标获取元素,并转成Boolean
233     public boolean getBooleanValue(int index) {
234         Object value = get(index);
235         if (value == null) {
236             return false;
237         }
238         return castToBoolean(value).booleanValue();
239     }
240     /**
241      * 根据下标获取对应类型的数据
242      * getByte、getByteValue、getShort、getShortValue、getInteger、getIntValue
243      * getLong、getLongValue、getFloat、getFloatValue、getDouble、getDoubleValue
244      * getBigDecimal、getBigInteger、getString、getDate、getSqlDate、getTimestamp
245      */
246     //转成指定类型的ArrayList对象
247     public <T> List<T> toJavaList(Class<T> clazz) {
248         List<T> list = new ArrayList<T>(this.size());
249 
250         ParserConfig config = ParserConfig.getGlobalInstance();
251 
252         for (Object item : this) {
253             T classItem = (T) TypeUtils.cast(item, clazz, config);
254             list.add(classItem);
255         }
256 
257         return list;
258     }
259     //复制
260     @Override
261     public Object clone() {
262         return new JSONArray1(new ArrayList<Object>(list));
263     }
264     public boolean equals(Object obj) {
265         return this.list.equals(obj);
266     }
267     public int hashCode() {
268         return this.list.hashCode();
269     }
270 }
 1 import java.util.HashMap;
 2 import java.util.Map;
 3 import java.util.Map.Entry;
 4 import java.util.Set;
 5 import com.alibaba.fastjson.JSON;
 6 import com.alibaba.fastjson.JSONArray;
 7 import com.alibaba.fastjson.JSONObject;
 8 
 9 /**
10  * fastjson常用方法介绍
11  */
12 public class TestJSON {
13     public static void main(String[] args) {
14         //json字符串
15         String jsonStr = "{'name':'zhangsan','age':'10'}";
16         String jsonStr2 = "{'name':'zhangsan','age':'11'}";
17         //将json字符串解析成JSONObject
18         JSONObject jsonObj = JSON.parseObject(jsonStr);
19         JSONObject jsonObj2 = JSON.parseObject(jsonStr2);
20         jsonObj.toJSONString();//转成Json字符串
21         jsonObj.isEmpty();//判断是否非空
22         jsonObj.containsKey("name");//是否包含指定key
23         jsonObj.containsValue("zhangsan");//是否包含指定value
24         jsonObj.equals(jsonObj2);//判断两个JSONObject是否相等
25         jsonObj.get("name");//使用map中的取值方法获取value
26         jsonObj.getString("name");//获取指定key对应的value
27         jsonObj.size();//获取长度
28         jsonObj.put("core", "a");//添加元素
29         jsonObj.remove("name");//删除指定key
30         jsonObj.clear();//清空
31         Map<String, Object> map = new HashMap<String, Object>();
32         jsonObj.putAll(map);//将指定map中的元素添加到JSONObject中
33         
34         jsonObj.keySet();//获取所有的key
35         jsonObj.values();//获取所有的value
36         
37         Set<Entry<String, Object>> entrySet = jsonObj.entrySet();//获取所有键值对entry
38         //遍历
39         for (Entry<String, Object> entry : entrySet) {
40             String key = entry.getKey();//获取key
41             String value = (String) entry.getValue();//获取value
42             entry.setValue("呵呵");//修改value值
43         }
44         
45         
46         //json字符串转JSONArray
47         String str1 = "[{'name':'zhangsan','age':'10'},{'name':'lisi','age':'20'}]";
48         String str2 = "[{'name':'zhang','age':'15'},{'name':'wangwu','age':'22'}]";
49         JSONArray jsonArray = JSON.parseArray(str1);
50         
51         String jsonString = jsonArray.toJSONString();//转成json字符串
52         
53         //遍历这个jsonArray
54         for (int i = 0; i < jsonArray.size(); i++) {
55             //获取jsonArray中的每一个元素,元素可以为JSONObject、JSONArray
56             JSONObject jsonObject = jsonArray.getJSONObject(i);
57             //然后通过map中的方法entrySet()方法获取键值对
58             Set<Entry<String, Object>> entrySet2 = jsonObject.entrySet();
59             for (Entry<String, Object> entry : entrySet2) {
60                 //然后对entrySet2遍历
61                 String key = entry.getKey();
62                 Object value = entry.getValue();
63             }
64         }
65     }
66 }

GSON

 1 /**
 2  * 实体类
 3  */
 4 public class Student {
 5     private String name;
 6     private Integer age;
 7     
 8     public Student() {
 9     }
10     public Student(String name, Integer age) {
11         super();
12         this.name = name;
13         this.age = age;
14     }
15     public String getName() {
16         return name;
17     }
18     public void setName(String name) {
19         this.name = name;
20     }
21     public Integer getAge() {
22         return age;
23     }
24     public void setAge(Integer age) {
25         this.age = age;
26     }
27 }
 1 import java.io.FileNotFoundException;
 2 import java.io.FileReader;
 3 import java.util.Iterator;
 4 
 5 import com.google.gson.Gson;
 6 import com.google.gson.JsonArray;
 7 import com.google.gson.JsonElement;
 8 import com.google.gson.JsonIOException;
 9 import com.google.gson.JsonObject;
10 import com.google.gson.JsonParser;
11 import com.google.gson.JsonSyntaxException;
12 /**
13  * 读取json文件
14  * JsonObject  就是key和value
15  * JsonElement  就是一个个value  但是对应的value也有很多可能性,例如可以是一个数组,可以是一个json对象
16  */
17 public class JsonAnalysis {
18     public static void main(String[] args) {
19         //1.创建一个json解析器
20         JsonParser parser = new JsonParser();
21         try {
22             /**
23              * JsonParser对象中有三个方法:
24              *     parse(JsonReader json)
25              *     parse(Reader json)
26              *     parse(String json) 将指定的JSON字符串解析为解析树
27              */
28                 //2.将流中的json字符串解析并强转成json对象
29                 JsonObject object = (JsonObject) parser.parse(new FileReader("test.json"));
30                 
31                 
32                 /**
33                  * JsonElement对象提供了对所有类型获取的方法。
34                  * 
35                  * 获取值的方法:
36                  * getAsBigDecimal() 
37                  * getAsBigInteger() 
38                  * getAsBoolean()     
39                  * getAsByte() 
40                  * getAsCharacter() 
41                  * getAsDouble() 
42                  * getAsFloat() 
43                  * getAsInt() 
44                  * getAsLong() 
45                  * getAsNumber() 
46                  * getAsShort() 
47                  * getAsString() 
48                  * 
49                  * getAsJsonArray() 
50                  * getAsJsonNull() 
51                  * getAsJsonObject()     
52                  * getAsJsonPrimitive() 
53                  * 
54                  * 判断的方法:
55                  * isJsonArray() 是否为一个数组
56                  * isJsonNull()  
57                  * isJsonObject() 
58                  * isJsonPrimitive() 
59                  * toString() 
60                  */
61                 
62                 //连写
63                 String name = object.get("name").getAsString();
64                 String age = object.get("age").getAsString();
65                 
66                 //获取节点存储的json对象
67                 JsonObject asJsonObject = object.getAsJsonObject("msg");
68                 JsonElement jsonElement2 = asJsonObject.get("a");//获取对象中的a节点
69                 String a = jsonElement2.getAsString();//获取a节点的值
70                 
71                 //获取对象中的b节点
72                 JsonElement jsonElement3 = asJsonObject.get("b");
73                 String b = jsonElement3.getAsString();//获取b节点的值
74                 
75                 Gson gson = new Gson();
76                 //获取节点存储的json对象
77                 JsonArray jsonArray = object.getAsJsonArray("core");
78                 //遍历JsonArray对象
79                 Iterator it = jsonArray.iterator();
80                 while(it.hasNext()){
81                     JsonElement e = (JsonElement)it.next();
82                     //JsonElement转换为JavaBean对象
83                     Student jbDemo = gson.fromJson(e, Student.class);
84                     System.out.println(jbDemo.getName() + "-" + jbDemo.getAge());  //zhangsan-25  lisi-26
85                 }
86         } catch (JsonIOException e) {
87             e.printStackTrace();
88         } catch (JsonSyntaxException e) {
89             e.printStackTrace();
90         } catch (FileNotFoundException e) {
91             e.printStackTrace();
92         }
93     }
94 }
 1 import com.google.gson.Gson;
 2 
 3 public class JsonAnalysis2 {
 4     public static void main(String[] args) {
 5         /**
 6          * gson提供的方法:
 7          *         fromJson(String json, Class<T> classOfT) 
 8          *         fromJson(JsonElement json, Class<T> classOfT) 
 9          *     解析json字符串或者JsonElement成指定的对象
10          */
11         String jsonData = "{'name':'John', 'age':20}";
12         Gson gson = new Gson();
13         Student stu = gson.fromJson(jsonData,Student.class);
14         System.out.println(stu.getName() + "-" + stu.getAge());
15     }
16 }
 1 import com.google.gson.Gson;
 2 
 3 public class JsonAnalysis3 {
 4     public static void main(String[] args) {
 5         Gson gson = new Gson();
 6         //解析基本类型数据
 7         int i = gson.fromJson("1", int.class);  
 8         double d = gson.fromJson(""1.11"", double.class); 
 9         double d2 = gson.fromJson("1.11", double.class);
10         boolean b = gson.fromJson("true", boolean.class); 
11         String s = gson.fromJson("str", String.class);
12         
13         System.out.println(i);    // 1
14         System.out.println(d);    // 1.11 
15         System.out.println(d2);    // 1.11  
16         System.out.println(b);    // true 
17         System.out.println(s);    // str
18     }
19 }
 1 import com.google.gson.Gson;
 2 
 3 public class JsonAnalysis4 {
 4     public static void main(String[] args) {
 5         Gson gson = new Gson();
 6         /**
 7          * toJson(Object src) 返回一个字符串。    对象转成json字符串
 8          */
 9         Gson gson1 = new Gson();  
10         String s1= gson1.toJson(1);  
11         String s2= gson1.toJson(false); 
12         String s3= gson1.toJson("str"); 
13         
14         System.out.println(s1);// 1
15         System.out.println(s2);// false 
16         System.out.println(s3);//"str" 
17     }
18 }
 1 import com.google.gson.Gson;
 2 
 3 public class JsonAnalysis5 {
 4     public static void main(String[] args) {
 5         Gson gson = new Gson();
 6         /**
 7          * 字符串数组转成json字符串,然后将json字符串转成字符串数组
 8          */
 9         String jsonss = "[aa,bb,cc]";
10         //将json字符串转成对应的字符串类型的数组
11         String[] str = gson.fromJson(jsonss, String[].class);  
12         for (String st:str) {  
13              System.out.println(st);//遍历得到数组中的元素
14         }  
15     }
16 }
 1 import java.util.ArrayList;
 2 import java.util.List;
 3 
 4 import com.google.gson.Gson;
 5 import com.google.gson.reflect.TypeToken;
 6 /**
 7  * 解析list
 8  */
 9 public class JsonAnalysis6 {
10     public static void main(String[] args) {
11         Gson gson = new Gson();
12         //自己创建json字符串
13         List<String> list = new ArrayList<String>();
14         list.add("a");
15         list.add("b");
16         String json = gson.toJson(list);//将list转成Json格式的字符串
17         
18         //将json字符串转成对应的字符串类型的数组
19         List<String> strList = gson.fromJson(json, new TypeToken<List<String>>() {}.getType());  
20         for (String st:strList) {  
21              System.out.println(st);//遍历得到数组中的元素
22         }  
23     }
24 }

GSON2

 1 public class User {
 2     private String name;
 3     private int age;
 4 
 5     // @SerializedName("email_address") // test5()使用
 6     // @SerializedName(value="emailAddress",alternate={"email","email_address"})//test6()使用
 7     private String emailAddress;
 8     public User() {}
 9     public User(String name, int age) {
10         this.name = name;
11         this.age = age;
12     }
13     public User(String name, int age, String emailAddress) {
14         this.name = name;
15         this.age = age;
16         this.emailAddress = emailAddress;
17     }
18     //set和get方法
19     public String getName() {
20         return name;
21     }
22     public void setName(String name) {
23         this.name = name;
24     }
25     public int getAge() {
26         return age;
27     }
28     public void setAge(int age) {
29         this.age = age;
30     }
31     public String getEmailAddress() {
32         return emailAddress;
33     }
34     public void setEmailAddress(String emailAddress) {
35         this.emailAddress = emailAddress;
36     }
37 }
 1 public class Resulter<T> {
 2     public int code;
 3     public String message;
 4     public T data;
 5     public Resulter() {}
 6     //set和get方法
 7     public int getCode() {
 8         return code;
 9     }
10 
11     public void setCode(int code) {
12         this.code = code;
13     }
14 
15     public String getMessage() {
16         return message;
17     }
18 
19     public void setMessage(String message) {
20         this.message = message;
21     }
22 
23     public T getData() {
24         return data;
25     }
26 
27     public void setData(T data) {
28         this.data = data;
29     }
30 }
  1 import java.util.ArrayList;
  2 import java.util.List;
  3 
  4 import com.google.gson.Gson;
  5 import com.google.gson.reflect.TypeToken;
  6 
  7 public class TestGson {
  8     private Gson gson = new Gson();
  9     /**
 10      * 测试main
 11      */
 12     public static void main(String[] args) {
 13         TestGson test = new TestGson();
 14         test.test9();
 15     }
 16     /**
 17      * json字符串转基本数据类型(String虽不是基本数据类型,但是是值传递,与基本数据类型处理相似)
 18      */
 19     public void test1() {
 20         int i = gson.fromJson("100", int.class); // 100
 21         double d = gson.fromJson("99.99", double.class); // 99.99
 22         boolean b = gson.fromJson("true", boolean.class); // true
 23         String str = gson.fromJson("String", String.class); // String
 24 
 25         System.out.println(i);
 26         System.out.println(d);
 27         System.out.println(b);
 28         System.out.println(str);
 29     }
 30 
 31     /**
 32      * 基本数据类型转json字符串(String虽不是基本数据类型,但是是值传递,与基本数据类型处理相似)
 33      */
 34     public void test2() {
 35         String jsonNumber = gson.toJson(100); // 100
 36         String jsonBoolean = gson.toJson(false); // false
 37         String jsonString = gson.toJson("String"); // "String"
 38 
 39         System.out.println(jsonNumber);
 40         System.out.println(jsonBoolean);
 41         System.out.println(jsonString);
 42     }
 43 
 44     /**
 45      * java对象转json字符串
 46      */
 47     public void test3() {
 48         User user = new User("ZhangSan", 24);
 49         String jsonObject = gson.toJson(user); // {"name":"ZhangSan","age":24}
 50         System.out.println(jsonObject);
 51     }
 52 
 53     /**
 54      * json字符串转java对象
 55      */
 56     public void test4() {
 57         String jsonString = "{name:ZhangSan,age:24}";
 58         User user = gson.fromJson(jsonString, User.class);
 59         System.out.println(user.getName() + " | " + user.getAge() + " | " + user.getEmailAddress());
 60     }
 61 
 62     /**
 63      * @SerializedName()的使用_1
 64      */
 65     public void test5() {
 66         User user = new User("ZhangSan", 24, "abc@163.com");
 67         String jsonObject = gson.toJson(user);
 68         // User.emailAddress未加'@SerializedName("email_address")'时的转换效果如下:
 69         // {"name":"ZhangSan","age":24,"emailAddress":"abc@163.com"}
 70 
 71         // User.emailAddress加了'@SerializedName("email_address")'时的转换效果如下:
 72         // {"name":"ZhangSan","age":24,"email_address":"abc@163.com"}
 73         System.out.println(jsonObject);
 74     }
 75 
 76     /**
 77      * @SerializedName()的使用_2
 78      */
 79     public void test6() {
 80         String json = "{name:ZhangSan,age:24,emailAddress:abc_1@example.com,"
 81                 + "email:abc_2@example.com,email_address:abc_3@example.com}";
 82         User user = gson.fromJson(json, User.class);
 83 
 84         System.out.println(user.getEmailAddress()); // abc_3@example.com
 85 
 86         // 当上面的三个属性(email_address、email、emailAddress)都中出现任意一个时均可以得到正确的结果。
 87         // 注:当多种情况同时出时,以最后一个出现的值为准。
 88         // 注:alternate需要2.4版本,本次测试的版本不可使用
 89     }
 90 
 91     /**
 92      * json字符串转基本类型数组(String虽不是基本数据类型,但是是值传递,与基本数据类型处理相似)
 93      */
 94     public void test7() {
 95         String jsonArray = "[Android,Java,PHP]";
 96         String[] strings = gson.fromJson(jsonArray, String[].class);
 97         System.out.println(strings[1]);
 98     }
 99 
100     /**
101      * TypeToken来实现对泛型的支持_1 将String[].class 直接改为 List<String>.class 是行不通的。需要进行泛型擦除。
102      */
103     public void test8() {
104         String jsonArray = "[Android,Java,PHP]";
105         List<String> stringList = gson.fromJson(jsonArray, (new TypeToken<List<String>>() {
106         }).getType());
107         System.out.println(stringList.get(1));
108     }
109 
110     /**
111      * TypeToken来实现对泛型的支持_2
112      */
113     public void test9() {
114         Resulter<List<User>> result = new Resulter<List<User>>();
115         result.setCode(200);
116         result.setMessage("success");
117         result.setData(new ArrayList<User>() {
118             {
119                 for (int i = 0; i < 2; i++) {
120                     this.add(new User("ZhangSan" + i, 25 + i, "abc@163.com"));
121                 }
122             }
123         });
124 
125         // 不使用TypeToken无法将User的内容转换出来
126         // fromJson()方法也是一样需要使用TypeToken指定要转换成的java对象类型
127         String gsonStr = gson.toJson(result, (new TypeToken<Resulter<List<User>>>() {
128         }).getType());
129         System.out.println(gsonStr);
130     }
131 }


 1 import java.util.ArrayList;
 2 import java.util.List;
 3 import java.util.Map;
 4 
 5 import com.google.gson.Gson;
 6 import com.google.gson.JsonArray;
 7 import com.google.gson.JsonElement;
 8 import com.google.gson.JsonParser;
 9 import com.google.gson.reflect.TypeToken;
10 
11 /**
12  * @ClassName: GsonUtil
13  * @Description: Gson解析json工具类
14  */
15 public class GsonUtil {
16     private static Gson gson = null;
17     
18     static {
19         if (gson == null) {
20             gson = new Gson();
21         }
22     }
23 
24     private GsonUtil() {}
25 
26     /**
27      * 将object对象 转成json字符串
28      */
29     public static String GsonString(Object object) {
30         String gsonString = null;
31         if (gson != null) {
32             gsonString = gson.toJson(object);
33         }
34         return gsonString;
35     }
36 
37     /**
38      * 将json字符串 转成泛型bean
39      */
40     public static <T> T GsonToBean(String gsonString, Class<T> cls) {
41         T t = null;
42         if (gson != null) {
43             t = gson.fromJson(gsonString, cls);
44         }
45         return t;
46     }
47 
48     /**
49      * json字符串 转成list 泛型在编译期类型被擦除导致报错
50      */
51     public static <T> List<T> GsonToList(String gsonString, Class<T> cls) {
52         List<T> list = null;
53         if (gson != null) {
54             list = gson.fromJson(gsonString, new TypeToken<List<T>>() {
55             }.getType());
56         }
57         return list;
58     }
59 
60     /**
61      * json字符串 转成list 解决泛型问题
62      */
63     public static <T> List<T> jsonToList(String json, Class<T> cls) {
64         Gson gson = new Gson();
65         List<T> list = new ArrayList<T>();
66         JsonArray array = new JsonParser().parse(json).getAsJsonArray();
67         for (final JsonElement elem : array) {
68             list.add(gson.fromJson(elem, cls));
69         }
70         return list;
71     }
72 
73     /**
74      * json字符串中有map的 转成list
75      */
76     public static <T> List<Map<String, T>> GsonToListMaps(String gsonString) {
77         List<Map<String, T>> list = null;
78         if (gson != null) {
79             list = gson.fromJson(gsonString, new TypeToken<List<Map<String, T>>>() {
80             }.getType());
81         }
82         return list;
83     }
84 
85     /**
86      * json字符串 转成map的
87      */
88     public static <T> Map<String, T> GsonToMaps(String gsonString) {
89         Map<String, T> map = null;
90         if (gson != null) {
91             map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() {
92             }.getType());
93         }
94         return map;
95     }
96 }
原文地址:https://www.cnblogs.com/wang1001/p/9759714.html