淺談Json在java中的使用

1.一般我們在進行客戶端和服務端交換數據的時候,會使用Json來進行數據的傳輸,即轉換成字符串類型的json數據來進行數據的交換。

2.Json類型的數據一般是 JSONObject(對象),JSONArray(數組)。一般來說二組的區別在於,對象是無序的,而數組是有序的,看具體需求選擇使用。

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

/**
 * 使用的是json-lib-2.4.jar
 * @author yes
 *
 */


public class TestJson {
    public static void main(String[] args) throws Exception {   
          //定義一個json對象
           JSONObject jo = new JSONObject();
           jo.put("id", "1");
           jo.put("name", "yang");
           jo.put("age", "13");

           //定義一個Json數組
           JSONArray ja = new JSONArray();
           ja.add(0, "yang");
           ja.add(1,"li");
           ja.add(2, "zhang");

           System.out.println("json對象的格式:"+jo);
           System.out.println("json數組的格式:"+ja);

           //使用類自帶的方法來轉換成String類型
           String str_ = jo.toJSONString();
           String strs_ = ja.toJSONString();

           System.out.println("json對象-->String"+str_);
           System.out.println("json數組-->String"+strs_);
    }       
}

執行結果:
json對象的格式:{"id":"1","age":"13","name":"yang"}
json數組的格式:["yang","li","zhang"]
json對象-->String{"id":"1","age":"13","name":"yang"}
json數組-->String["yang","li","zhang"]

3.Json在數據傳輸中的使用

a.將各種類型裝換成Json類型字符串
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test03 {
    public static void main(String[] args) {        
    //創建一個User對象(name,age,id)
        User user = new User();
        user.setAge(22);
        user.setName("張三");
        user.setId(33);

        List li = new ArrayList();  
        //創建一個Map,放入三組值
    Map<String, Object> hashMap = new HashMap<String, Object>();
           hashMap.put("name", "ZHULI");
           hashMap.put("age", "30");
           hashMap.put("id", "4");

         //向List中放入數據   
            li.add(0, "123");
            li.add(1,"444");  
            li.add(hashMap); 

        //將List,Map,Bean---->json類型字符串  
            String stra = GsonUtil.GsonString(user);
            String strb = GsonUtil.GsonString(hashMap);
            String strc = GsonUtil.GsonString(li);

            System.out.println("Bean-->String結果:"+stra);
            System.out.println("Map-->String結果:"+strb);
            System.out.println("List-->String結果"+strc);

    }
}
執行結果:
Bean-->String結果:{"name":"張三","age":22,"id":33}
Map-->String結果:{"id":"4","age":"30","name":"ZHULI"}
List-->String結果["123","444,{"id":"4","age":"30","name":"ZHULI"}]
b.將各種類型的json類型字符串解析出來
//1.將JsonArray類型字符串轉換成Bean或list

import java.util.List;
import Socket.User;

public class Test02 {

public static void main(String[] args) {
    //定義一個jsonArrayString
    String json = "[{'name':'yang','id':'1','age':'18'},"
            + "{'name':'zhang','id':'2','age':'13'}]";

    //jsonString轉list,User類自己創建,三個屬性
    List<User> li = GsonUtil.jsonArrayToList(json,User.class);
    for(User user : li){
        String name = user.getName();
        Integer id = user.getId();
        Integer age = user.getAge();
        System.out.println("學生的姓名是:"+name+"  "+"ID是:"+id+"  "+"年齡是:"+age);
    }   
  }
}

執行結果:
學生的姓名是:yang  ID是:1  年齡是:18
學生的姓名是:zhang  ID是:2  年齡是:13
將JsonArray類型字符串轉換成List中包含map的
import java.util.List;
import java.util.Map;

public class Test05 {
    public static void main(String[] args) {

        String json = "['123','444',{'id':'4','age':'30','name':'ZHULI'}]";

        //list中含有Map但不全是Map
        List li = GsonUtil.GsonToListMap(json);
        Map m  =(Map) li.get(2);        
        System.out.println(m.get("age"));

    }
}
//如果list中全部是Map類型的數據,使用GsonToListMap();方法
執行結果:
30
123
c.實用性比較高的,複雜的數據轉化成Bean進行操作
//先貼出學生類
package TestJson;

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

public class Student {
    private String id;
    private String nickName;
    private String email;
    private String age;
    private List<String> books = new ArrayList<String>();
    private  HashMap<String, String> booksMap = new HashMap<String, String>();
    //獲取set,get方法
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getNickName() {
        return nickName;
    }
    public void setNickName(String nickName) {
        this.nickName = nickName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public List<String> getBooks() {
        return books;
    }
    public void setBooks(List<String> books) {
        this.books = books;
    }
    public HashMap<String, String> getBooksMap() {
        return booksMap;
    }
    public void setBooksMap(HashMap<String, String> booksMap) {
        this.booksMap = booksMap;
    }  

}
//測試代碼
package TestJson;

public class Test05 {
    public static void main(String[] args) {
    //定義一個包含list,map類型的字符串
        String json = "{'books':['數學','語文','英語','物理','化學','生物'],'booksMap':{'3':'英語','2':'語文','1':'數學','6':'生物','5':'化學','4':'物理'},'email':'[email protected]','nickName':'小明','id':'1','age':'22'}";  
    //轉化成Bean   
    Student su = GsonUtil.GsonToBean(json, Student.class);
    System.out.println("學生的姓名是:"+su.getNickName());
    System.out.println("學生學習的第一門課:"+su.getBooks().get(0));
    System.out.println("序號3課程是:"+su.getBooksMap().get("3"));
    }
}

執行結果:
學生的姓名是:小明
學生學習的第一門課:數學
序號3對應的課程是:英語

5.將基本的轉化實現放到了一個工具類中。GsonUtil.java

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

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;

/**
 * 使用gson來操作Json
 * 1.對象實體類,list,map,等轉化成----->jsonString(進行數據傳遞)
 * 2.jsonString轉化成----->對象實體類,list,map(解析返回的數據)
 * 3.我使用的是gson-2.2.2.jar
 * @author yes
 *
 */

public class GsonUtil {


private static Gson gson = null;
    static {
        if (gson == null) {
            gson = new Gson();
        }
    }


    /**
     * 將object對象轉成json字符串(jsonString)
     * boject 可以是List,也可以是Bean(對象類型)
     * @param object
     */
    public static String GsonString(Object object) {
        String gsonString = null;
        if (gson != null) {
            gsonString = gson.toJson(object);
        }
        return gsonString;
    }


    /**入參是json對象
     * 將gsonObjectString轉成泛型bean(實體類)
     * @param gsonString
     */
    public static <T> T GsonToBean(String gsonString, Class<T> cls) {
        T t = null;
        if (gson != null) {
            t = gson.fromJson(gsonString, cls);
        }
        return t;
    }

    /**
     * 這裏的入參是json數組類型的字符串
     * jsonArrayString轉成list
     */
    public static <T> List<T> jsonArrayToList(String json, Class<T> cls) {
        Gson gson = new Gson();
        List<T> list = new ArrayList<T>();
        JsonArray array = new JsonParser().parse(json).getAsJsonArray();
        for(final JsonElement elem : array){
            list.add(gson.fromJson(elem, cls));
        }
        return list;
    }



    /**
     * List對泛型沒有要求
     * jsonString轉成list中有map的
     */
    public static <T> List<Map<String, T>> GsonToListMap(String gsonString) {
        List list = null;
        if (gson != null) {
            list = gson.fromJson(gsonString,
                    new TypeToken<List>() {
                    }.getType());
        }
        return list;
    }

    /**
     * 要求List中全部是Map
     * jsonString轉成list中有map的
     */
    public static <T> List<Map<String, T>> GsonToListMaps(String gsonString) {
        List<Map<String, T>> list = null;
        if (gson != null) {
            list = gson.fromJson(gsonString,
                    new TypeToken<List<Map<String, T>>>() {
                    }.getType());
        }
        return list;
    }


    /**
     * jsonString轉成map的
     */
    public static <T> Map<String, T> GsonToMaps(String gsonString) {
        Map<String, T> map = null;
        if (gson != null) {
            map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() {
            }.getType());
        }
        return map;
    }

    /**
     * map轉jsonString,指定了Map類型
     */
    public static String MapToJson(Map<String,Object> map){
        String str = null;
        if(gson != null){
            str = gson.toJson(map);
        }
        return str;
    }    
}

6.差不多在項目中的使用可以實現了,這裏我從開始不懂到自己敲出來,也是參考了很多博客前輩的知識講解。在學習中進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章