GSON中Java對象與JSON互相轉換——(一)


 

json的轉換插件是通過java的一些工具,直接將java對象或集合轉換成json字符串。

常用的json轉換工具有如下幾種:

1)jsonlib

2)Gson:google

3)fastjson:阿里巴巴

 

------GSON操作簡單,只需要一個jar包----------

User.java

 1 package bean;
 2 
 3 public class User {
 4 
 5     private String id;
 6     private String name;
 7     private int age;
 8     private String address;
 9     public String getId() {
10         return id;
11     }
12     public void setId(String id) {
13         this.id = id;
14     }
15     public String getName() {
16         return name;
17     }
18     public void setName(String name) {
19         this.name = name;
20     }
21     public User(String id, String name, int age, String address) {
22         super();
23         this.id = id;
24         this.name = name;
25         this.age = age;
26         this.address = address;
27     }
28     @Override
29     public String toString() {
30         return "User [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]";
31     }
32     
33     
34     
35 }

 

1.測試Java對象轉JSON(測試結果在后面注釋)

操作簡單,無論轉單個對象還是集合,都是gson.toJson(obj);

 1 package TestJson;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 
 8 import javax.xml.bind.UnmarshallerHandler;
 9 
10 import org.junit.Test;
11 
12 import com.google.gson.Gson;
13 
14 import bean.User;
15 
16 public class Bean2JSON {
17 
18 //    測試單個對象轉JSON
19     @Test
20     public void test1(){
21         User user = new User("1", "QIAOZHI",25,"山西太原");
22         Gson gson = new Gson();
23         String json = gson.toJson(user);
24         System.out.println(json);   //{"id":"1","name":"QIAOZHI","age":25,"address":"山西太原"}
25     }
26     
27     
28     
29 //    測試list轉JSON
30     @Test
31     public void test2(){
32         List<User> list = new ArrayList<User>();
33         list.add(new User("1", "QIAOZHI",25,"山西太原"));
34         list.add(new User("2", "QIAOZHI",25,"山西太原"));
35         list.add(new User("3", "QIAOZHI",25,"山西太原"));
36         Gson gson = new Gson();
37         String json = gson.toJson(list);
38         System.out.println(json);
39 //        [{"id":"1","name":"QIAOZHI","age":25,"address":"山西太原"},{"id":"2","name":"QIAOZHI","age":25,"address":"山西太原"},{"id":"3","name":"QIAOZHI","age":25,"address":"山西太原"}]
40     }
41     
42 //    測試map對象轉JSON
43     @Test
44     public void test3(){
45         Map<String,User> map = new HashMap<String,User>();
46         map.put("1", new User("1", "QIAOZHI",25,"山西太原"));
47         map.put("2", new User("2", "QIAOZHI",25,"山西太原"));
48         map.put("3", new User("3", "QIAOZHI",25,"山西太原"));
49         Gson gson = new Gson();
50         String json = gson.toJson(map);
51         System.out.println(json);
52 //        {"3":{"id":"3","name":"QIAOZHI","age":25,"address":"山西太原"},"2":{"id":"2","name":"QIAOZHI","age":25,"address":"山西太原"},"1":{"id":"1","name":"QIAOZHI","age":25,"address":"山西太原"}}
53     }
54     
55 //    測試list<map>對象轉JSON
56     @Test
57     public void test4(){
58         List<Map<String,User>> list = new ArrayList<>();
59         Map<String,User> map1 = new HashMap<String,User>();
60         Map<String,User> map2 = new HashMap<String,User>();
61         map1.put("map11", new User("1", "QIAOZHI",25,"山西太原"));
62         map1.put("map12", new User("2", "QIAOZHI",25,"山西太原"));
63         map2.put("21", new User("11", "QIAOZHI",25,"山西太原"));
64         map2.put("22", new User("21", "QIAOZHI",25,"山西太原"));
65         list.add(map1);
66         list.add(map2);
67         Gson gson = new Gson();
68         String json = gson.toJson(list);
69         System.out.println(json);
70 //        [{"map12":{"id":"2","name":"QIAOZHI","age":25,"address":"山西太原"},"map11":{"id":"1","name":"QIAOZHI","age":25,"address":"山西太原"}},{"21":{"id":"11","name":"QIAOZHI","age":25,"address":"山西太原"},"22":{"id":"21","name":"QIAOZHI","age":25,"address":"山西太原"}}]
71     }
72     
73 }

 

 

 2.測試Json轉Java對象與集合(測試結果在后面注釋)

package TestJson_GSON;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Test;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class JSON2Bean {
//    測試json轉單個對象
    @Test
    public void test1(){
        String json = "{'id':'1','name':'QIAOZHI','age':25,'address':'山西太原'}";
        Gson gson = new Gson();
        User user = gson.fromJson(json, User.class);
        System.out.println(user);  
//        User [id=1, name=QIAOZHI, age=25, address=山西太原]
    }
    
    
    
//    測試JSON轉list
    @SuppressWarnings("unchecked")
    @Test
    public void test2(){
        String json = "[{'id':'1','name':'QIAOZHI','age':25,'address':'山西太原'},{'id':'2','name':'QIAOZHI','age':25,'address':'山西太原'},{'id':'3','name':'QIAOZHI','age':25,'address':'山西太原'}]";
        List<User> list = new ArrayList<User>();
        Gson gson = new Gson();
        list = (List<User>) gson.fromJson(json, new TypeToken<List<User>>(){}.getType());
        System.out.println(list);
        for(User user:list){
            System.out.println(user);
        }
//        [{id=1, name=QIAOZHI, age=25.0, address=山西太原}, {id=2, name=QIAOZHI, age=25.0, address=山西太原}, {id=3, name=QIAOZHI, age=25.0, address=山西太原}]
        System.out.println(list.get(1));
//        {id=2, name=QIAOZHI, age=25.0, address=山西太原}
    }
    
    
//    測試JSON轉Map
    @Test
    public void test3(){
        String json = "{'3':{'id':'3','name':'QIAOZHI','age':25,'address':'山西太原'},'2':{'id':'2','name':'QIAOZHI','age':25,'address':'山西太原'},'1':{'id':'1','name':'QIAOZHI','age':25,'address':'山西太原'}}";
        Map<String,User> map = new HashMap<String,User>();
        Gson gson = new Gson();
        map = (Map<String,User>) gson.fromJson(json, new TypeToken<Map<String,User>>(){}.getType());
        System.out.println(map);
//        {3={id=3, name=QIAOZHI, age=25.0, address=山西太原}, 2={id=2, name=QIAOZHI, age=25.0, address=山西太原}, 1={id=1, name=QIAOZHI, age=25.0, address=山西太原}}
        User user = map.get("1");
        System.out.println(user);
//        {id=1, name=QIAOZHI, age=25.0, address=山西太原}
    }
    
    
//    測試JSON轉list<map>對象
    @SuppressWarnings("unchecked")
    @Test
    public void test4(){
        String json = "[{'map12':{'id':'2','name':'QIAOZHI','age':25,'address':'山西太原'},'map11':{'id':'1','name':'QIAOZHI','age':25,'address':'山西太原'}},{'21':{'id':'11','name':'QIAOZHI','age':25,'address':'山西太原'},'22':{'id':'21','name':'QIAOZHI','age':25,'address':'山西太原'}}]";
        List<Map<String,User>> list = new ArrayList<>();
        Gson gson = new Gson();
        list = gson.fromJson(json, new TypeToken<List<Map<String,User>>>(){}.getType());
        System.out.println(list);
//        [{map12={id=2, name=QIAOZHI, age=25.0, address=山西太原}, map11={id=1, name=QIAOZHI, age=25.0, address=山西太原}}, {21={id=11, name=QIAOZHI, age=25.0, address=山西太原}, 22={id=21, name=QIAOZHI, age=25.0, address=山西太原}}]
        System.out.println(list.get(1));
//        {21={id=11, name=QIAOZHI, age=25.0, address=山西太原}, 22={id=21, name=QIAOZHI, age=25.0, address=山西太原}}
    }
}

 

 

注意:

json轉普通的Javabean只需要兩個簡單的參數,第一個是json字符串,第二個是需要轉換對象的類型。  

User user = gson.fromJson(json, User.class);

 

 

json轉集合與map類型需要使用了TypeToken,它是gson提供的數據類型轉換器,可以支持各種數據集合類型轉換。也就是通知GSON將json轉為那種集合

list = (List<User>) gson.fromJson(json, new TypeToken<List<User>>(){}.getType());

map = (Map<String,User>) gson.fromJson(json, new TypeToken<Map<String,User>>(){}.getType());

list = gson.fromJson(json, new TypeToken<List<Map<String,User>>>(){}.getType());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM