1. 程式人生 > >Gson在java物件和json字串之間轉換

Gson在java物件和json字串之間轉換

GsonLib下載連結
Gson相比org.json最大的好處是從json字串轉向java例項時候少了依據每個例項自己賦值的過程,比如在org.json的時候,我們先從json字串構建一個jsonobject,然後用各種的json get方法獲取到每個欄位的值,這是一個體力活。而gson依據反射機制我們只要傳遞我們要例項化的型別class進去返回就是建立好的例項。大大減少了程式碼量。

先從java例項到json這個方向

構建了三個方法,分別測試javabean,list,map轉化成json的用例。用法超級簡單,例項化一個Gson例項,然後呼叫成員方法tojson,然後就轉化成了json字串。
這個tojson方法不依靠原來物件的tostring方法。也就是說待json化的物件不實現tostring方法也可以成功json化。

package gson.demo.tojson;

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

import com.google.gson.Gson;

import gson.demo.javabean.Person;

public class ObjectToJson {

    /**
     * javabean to json
     * 
     * @param person
     * @return
     */
    public static String javabeanToJson(Person person) {
        Gson gson = new
Gson(); String json = gson.toJson(person); return json; } /** * list to json * * @param list * @return */ public static String listToJson(List<Person> list) { Gson gson = new Gson(); String json = gson.toJson(list); return
json; } /** * map to json * * @param map * @return */ public static String mapToJson(Map<String, Person> map) { Gson gson = new Gson(); String json = gson.toJson(map); return json; } }

Json到java例項

這方面是Gson的優勢
關於new TypeToken<List<Person>>() {}.getType());的問題是eclipse沒有提示要寫對。這個引數的作用是給出例項化的模板

package gson.demo.tojson;

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

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

import gson.demo.javabean.Person;

public class JsonToObject {

    /**
     * json to javabean
     * 
     * @param json
     */
    public static void jsonToJavaBean(String json) {
        Gson gson = new Gson();
        Person person = gson.fromJson(json, Person.class);//對於javabean直接給出class例項
        System.out.println(person.toString());
    }

    /**
     * json字串轉List集合
     */

    public static void jsonToList(String json) {

        Gson gson = new Gson();
        List<Person> persons = gson.fromJson(json, new TypeToken<List<Person>>() {
        }.getType());//對於不是類的情況,用這個引數給出
        for (Person person : persons) {
            System.out.println(person);
        }
    }

    public static void jsonToMap(String json) {
        // TODO Auto-generated method stub
        Gson gson = new Gson();
        Map<String, Person> maps = gson.fromJson(json, new TypeToken<Map<String, Person>>() {
        }.getType());
        for (Map.Entry<String, Person> entry : maps.entrySet()) {
            System.out.println("key: " + entry.getKey() + "  " + "value: " + entry.getValue());

        }
    }
}

最後給出測試資料

package gson.demo;

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

import gson.demo.javabean.Book;
import gson.demo.javabean.Person;
import gson.demo.tojson.JsonToObject;
import gson.demo.tojson.ObjectToJson;

public class GsonDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // javabean to json
        Person person = new Person("彭曉", "dslkfjdslf", 344, new Book("java", "vincent"));
        System.out.println(ObjectToJson.javabeanToJson(person));

        // list to json
        List<Person> list = new ArrayList<>();
        list.add(person);
        Person p = new Person("彭真", "slfjdj", 32423, new Book("android", "郭林"));
        list.add(p);
        System.out.println(ObjectToJson.listToJson(list));

        // map json
        Map<String, Person> map = new HashMap<>();
        map.put("m1", person);
        map.put("m2", p);
        System.out.println(ObjectToJson.mapToJson(map));

        /**
         * 下面是json直接通過gson轉換為例項物件
         */
        // json to javabean
        String json = "{\"username\":\"張三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三國演義\",\"price\":0,\"author\":\"羅貫中\"}}";
        JsonToObject.jsonToJavaBean(json);

        // json to list
        String str = "[{\"username\":\"張三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三國演義\",\"price\":0,\"author\":\"羅貫中\"}},{\"username\":\"李四\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三國演義\",\"price\":0,\"author\":\"羅貫中\"}}]";
        JsonToObject.jsonToList(str);

        // json to map

        String mapStr = "{\"m1\":{\"username\":\"張三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三國演義\",\"price\":0,\"author\":\"羅貫中\"}},\"m2\":{\"username\":\"李四\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"紅樓夢\",\"price\":0,\"author\":\"曹雪芹\"}}}";
        JsonToObject.jsonToMap(mapStr);
    }

}

執行效果
這裡寫圖片描述