1. 程式人生 > >Java Gson 使用,Gson將字串轉為list

Java Gson 使用,Gson將字串轉為list

Gson 是 Google 提供的用來在 Java 物件和 JSON 資料之間進行對映的 Java 類庫。可以將一個 JSON 字串轉成一個 Java 物件,或者反過來。

物件轉為字串

String ps =gson.toJson(person);

字串轉為物件

Person person =gson.fromJson(json, Person.class);

字串為為list

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

物件轉為字串,以鍵值對的方式返回字串。

字串轉為物件,要注意字串的格式。格式與物件轉換的字串一樣,可以參照。

注意:

需要jar包 gson-2.3.jar,可從gson的官方下載所需版本。

字串轉為物件時,""字串轉出來物件為null,"{}" 轉出來有物件,但各個欄位為空值。

物件內有list欄位時,json字串的寫法

json = "{\"id\":2,\"name\":\"abc\",\"books\":[\"xiqu\",\"wenzhang\",\"xiaoshuo\"]}";

json為list的寫法

json = "[{\"id\":2,\"name\":\"abc\",\"books\":[\"xiqu\",\"wenzhang\",\"xiaoshuo\"]},"
+ "{\"id\":3,\"name\":\"def\",\"books\":[\"dianshi\",\"wenzhang\",\"xiaoshuo\"]}]";


程式碼示例:

import java.util.LinkedList;
import java.util.List;

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

class Person {
	private long id;
	private String name;
	private List<String> books;

	public Person(long id, String name) {
		this.id = id;
		this.name = name;
	}

	public Person(long id, String name, List<String> books) {
		this(id, name);
		this.books = books;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<String> getBooks() {
		return books;
	}

	public void setBooks(List<String> books) {
		this.books = books;
	}

	public String toString(){
		return "Person : { id=" + this.id + "  name=" + this.name + "  books=" + this.books + " }";
	}
}

public class Gsontest {
	static Gson gson = new Gson();

	public static void main(String[] args) {
		toJson();
		fromJson();
	}

	static void toJson() {
		List<String> books = new LinkedList<String>();
		books.add("abook");
		books.add("bbook");
		books.add("cbook");
		Person person = new Person(1, "xiao", books);

		// 將一個物件轉為以鍵值對錶示的字串,物件內可包含list等都可以
		String ps = gson.toJson(person);
		System.out.println(ps);

		// 將一個物件List 轉為以鍵值對錶示的字串
		List<Person> persons = new LinkedList<Person>();
		persons.add(person);
		persons.add(new Person(2, "ming", books));
		System.out.println(gson.toJson(persons));
	}

	static void fromJson() {
		// 空字串轉出來物件為null
		String json = "";
		// 提供兩個引數,分別是json字串以及需要轉換物件的型別。
		Person person = gson.fromJson(json, Person.class);
		System.out.println(person);

		// 注:字串必須在{}內,list型別包含在[]內,否則轉換失敗拋異常
		json = "{}";
		// {}內無內容,可以轉換成物件,物件不為空,但是各個欄位沒有值
		person = gson.fromJson(json, Person.class);
		System.out.println(person);

		// 注意鍵值對的寫法,如果轉換出錯,很可能是寫法不對,寫法可以參照由 toJson 轉出來的字串.
		json = "{\"id\":2,\"name\":\"abc\",\"books\":[\"xiqu\",\"wenzhang\",\"xiaoshuo\"]}";
		person = gson.fromJson(json, Person.class);
		System.out.println(person);

		// TypeToken,它是gson提供的資料型別轉換器,可以支援各種資料集合型別轉換
		json = "[{\"id\":2,\"name\":\"abc\",\"books\":[\"xiqu\",\"wenzhang\",\"xiaoshuo\"]},"
				+ "{\"id\":3,\"name\":\"def\",\"books\":[\"dianshi\",\"wenzhang\",\"xiaoshuo\"]}]";
		List<Person> persons = gson.fromJson(json, new TypeToken<List<Person>>() {
		}.getType());
		System.out.println(persons);
	}
}