GP Coder

Trang chia sẻ kiến thức lập trình Java

  • Java Core
    • Basic Java
    • OOP
    • Exception Handling
    • Multi-Thread
    • Java I/O
    • Networking
    • Reflection
    • Collection
    • Java 8
  • Design pattern
    • Creational Pattern
    • Structuaral Pattern
    • Behavior Pattern
  • Web Service
    • SOAP
    • REST
  • JPA
  • Java library
    • Report
    • Json
    • Unit Test
  • Message Queue
    • ActiveMQ
    • RabbitMQ
  • All
Trang chủ Java library Json Hướng dẫn sử dụng thư viện Gson

Hướng dẫn sử dụng thư viện Gson

Đăng vào 06/01/2018 . Được đăng bởi GP Coder . 20742 Lượt xem . Toàn màn hình

Trong bài trước, chúng ta đã tìm hiệu về Json. Trong bài này, tôi sẽ hướng dẫn bạn sử dụng thư viện Google Json để chuyển đổi Java Object sang JSON và ngược lại.

Nội dung

  • 1 Giới thiệu
  • 2 Các ví dụ

Giới thiệu

Gson là một thư viện Java có thể được sử dụng để chuyển đổi các đối tượng Java thành chuỗi JSON. Nó cũng có thể được sử dụng để chuyển đổi một chuỗi JSON thành một đối tượng Java tương ứng. Gson có thể làm việc với các đối tượng Java tùy ý bao gồm các đối tượng đã tồn tại từ trước mà bạn không có mã nguồn của nó.

Có một vài thư viện nguồn mở khác có thể chuyển các đối tượng Java sang JSON. Tuy nhiên, hầu hết nó yêu cầu bạn đặt các Annotation trong các lớp của bạn; hoặc một vài thứ bạn không thể làm nếu bạn không có quyền truy cập vào mã nguồn. Hầu hết cũng không hỗ trợ đầy đủ việc sử dụng Generics Java.

Mục tiêu Gson:

  • Cung cấp các phương thức toJson() và fromJson() đơn giản để chuyển các đối tượng Java sang JSON và ngược lại.
  • Cho phép các đối tượng không thể thay đổi có sẵn được chuyển đổi sang/ từ JSON.
  • Hỗ trợ rộng rãi của Java Generics.
  • Cho phép tùy chỉnh cho các đối tượng để chuyển đổi sang/ từ JSON.
  • Hỗ trợ các đối tượng phức tạp (có phân cấp thừa kế nhiều cấp và sử dụng rộng rãi các kiểu dữ liệu Generics).

Download thư viện Gson:


<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
	<version>2.8.2</version>
</dependency>

Các ví dụ

Sử dụng Gson với kiểu dữ liệu nguyên thủy (primitives type)


package com.gpcoder.gson;

import com.google.gson.Gson;

public class PrimitiveExample {
	public static void main(String[] args) {
		// Serialization
		Gson gson = new Gson();
		gson.toJson(1); // ==> 1
		gson.toJson("abcd"); // ==> "abcd"
		gson.toJson(new Long(10)); // ==> 10
		int[] values = { 1 };
		gson.toJson(values); // ==> [1]

		// Deserialization
		int one = gson.fromJson("1", int.class);// ==> 1
		Integer oneInteger = gson.fromJson("1", Integer.class);// ==> 1
		Long oneLong = gson.fromJson("1", Long.class);// ==> 1
		Boolean bool = gson.fromJson("false", Boolean.class); // ==> false
		String str = gson.fromJson("\"abc\"", String.class);// ==> "abcd"
		String[] anotherStr = gson.fromJson("[\"abc\"]", String[].class);// ==> ["abc"]
	}
}

Các phương thức sử dụng:

  • toJson() : phương thức dùng để chuyển Java Object sang chuỗi Json (quá trình này được gọi là Serialization). Phương thức này có 1 đối số là đối tượng cần chuyển sang chuỗi Json.
  • fromJson() : phương thức dùng để chuyển chuỗi Json sang Java Object (quá trình này được gọi là Deserialization). Phương thức này có 2 đối số, đối số đầu tiên là chuỗi json, đối số thứ hai là kiểu dữ liệu Java Object ứng với chuỗi json.

Sử dụng Gson với Object


package com.gpcoder.gson;

import com.google.gson.Gson;

class Person {
	private String name;
	private String location;

	public Person(String name, String location) {
		super();
		this.name = name;
		this.location = location;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", location=" + location + "]";
	}

	// Getters and setters are not required for this example.
	// GSON sets the fields directly using reflection.
}

public class ObjectExample {

	public static void main(String[] args) {
		Person person = new Person("GP Coder", "Viet Nam");
		Gson gson = new Gson();
		// Serialization
		String json = gson.toJson(person);
		System.out.println(json); // {"name":"GP Coder","location":"Viet Nam"}
		
		// Deserialization
        Person person2 = gson.fromJson(json, Person.class);
        System.out.println(person2);
	}
}

Sử dụng Gson với Array


package com.gpcoder.gson;

import com.google.gson.Gson;

public class ArrayExample {
	public static void main(String[] args) {
		Gson gson = new Gson();
		int[] ints = { 1, 2, 3, 4, 5 };
		String[] strings = { "abc", "def", "ghi" };

		// Serialization
		gson.toJson(ints); // ==> [1,2,3,4,5]
		gson.toJson(strings); // ==> ["abc", "def", "ghi"]

		// Deserialization
		int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class);
		// ==> ints2 will be same as ints
	}
}

 

Sử dụng Gson với Collection


package com.gpcoder.gson;

import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

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

public class CollectionExample1 {
	public static void main(String[] args) {
		Gson gson = new Gson();
		List<Integer> ints = Arrays.asList(1,2,3,4,5);

		// Serialization
		String json = gson.toJson(ints);  // ==> json is [1,2,3,4,5]

		// Deserialization
		Type collectionType = new TypeToken<List<Integer>>(){}.getType();
		Collection<Integer> ints2 = gson.fromJson(json, collectionType);
		// ==> ints2 is same as ints
	}
}

Sử dụng Gson với Collection và Generic Type


package com.gpcoder.gson;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

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

public class CollectionExample2 {
	public static void main(String[] args) {
		// Gson gson = new Gson();
		Gson gson = new GsonBuilder().setPrettyPrinting().create();
		List<Person> persons = new ArrayList<Person>();
		persons.add(new Person("GP Coder", "Viet Nam"));
		persons.add(new Person("Vincent", "Canada"));

		// Serialization
		String json = gson.toJson(persons);  
		System.out.println(json);

		// Deserialization
		Type collectionType = new TypeToken<List<Person>>(){}.getType();
		List<Person> persons2 = gson.fromJson(json, collectionType);
		// ==> persons2 is same as persons
	}
}

Kết quả thực thi chương trình trên:


[
  {
    "name": "GP Coder",
    "location": "Viet Nam"
  },
  {
    "name": "Vincent",
    "location": "Canada"
  }
]

Lưu ý:

Trong ví dụ trên tôi khởi tạo đối tượng Gson sử dụng phương thức GsonBuilder().setPrettyPrinting().create() để tạo chuỗi Json có format.

Sử dụng Gson với Map


package com.gpcoder.gson;

import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;

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

public class MapExample {
	public static void main(String[] args) {
        Map<String, String> inputMap = new HashMap<String, String>();
        inputMap.put("name", "GP Coder");
        inputMap.put("site", "https://gpcoder.com");
        System.out.println("Input Map: " + inputMap);
        
		Gson gson = new Gson();
		// Serialization
        String json = gson.toJson(inputMap);
        System.out.println("Json: " + json); // {"site":"https://gpcoder.com","name":"GP Coder"}

		// Deserialization
		Type mapType = new TypeToken<Map<String, Object>>(){}.getType();
		Map<String, String> outputMap = gson.fromJson(json, mapType);
        System.out.println("Output Map: " + outputMap);
	}
}

Trên đây là những ví dụ cơ bản về sử dụng thư viện Gson trong Java. Trong các bài kế tiếp chúng ta sẽ tìm hiểu thêm các tính năng nâng cao khác như: Streaming API, Gson Annotation, Custom Serialization and Deserialization, …

4.7
10
Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé! Và Donate tác giả

Shares

Chuyên mục: Json Được gắn thẻ: Gson, json

Giới thiệu Json
Hướng dẫn Gson Streaming API để đọc và ghi JSON

Có thể bạn muốn xem:

  • Giới thiệu Json (05/01/2018)
  • Hướng dẫn sử dụng Gson ExclusionStrategy (13/01/2018)
  • Hướng dẫn sử dụng Jackson Json Annotations (28/01/2018)
  • Hướng dẫn sử dụng Gson Annotations (12/01/2018)
  • Gson Custom Serialization và Deserialization (14/01/2018)

Bình luận

bình luận

Tìm kiếm

Bài viết mới

  • Clean code 13/01/2024
  • Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud 02/10/2020
  • Kết nối RabbitMQ sử dụng Web STOMP Plugin 19/06/2020
  • Sử dụng publisher confirm trong RabbitMQ 16/06/2020
  • Sử dụng Dead Letter Exchange trong RabbitMQ 13/06/2020

Xem nhiều

  • Hướng dẫn Java Design Pattern – Factory Method (97351 lượt xem)
  • Hướng dẫn Java Design Pattern – Singleton (96986 lượt xem)
  • Giới thiệu Design Patterns (86648 lượt xem)
  • Lập trình đa luồng trong Java (Java Multi-threading) (85486 lượt xem)
  • Giới thiệu về Stream API trong Java 8 (83024 lượt xem)

Nội dung bài viết

  • 1 Giới thiệu
  • 2 Các ví dụ

Lưu trữ

Thẻ đánh dấu

Annotation Authentication Basic Java Behavior Pattern Collection Creational Design Pattern Cấu trúc điều khiển Database Dependency Injection Design pattern Eclipse Exception Executor Service Google Guice Gson Hibernate How to Interceptor IO Jackson Java 8 Java Core JDBC JDK Jersey JMS JPA json JUnit JWT Message Queue Mockito Multithreading OOP PowerMockito RabbitMQ Reflection Report REST SOAP Structuaral Pattern Swagger Thread Pool Unit Test Webservice

Liên kết

  • Clean Code
  • JavaTpoint
  • Refactoring Guru
  • Source Making
  • TutorialsPoint
  • W3Schools Online Web Tutorials

Giới thiệu

GP Coder là trang web cá nhân, được thành lập với mục đích lưu trữ, chia sẽ kiến thức đã học và làm việc của tôi. Các bài viết trên trang này chủ yếu về ngôn ngữ Java và các công nghệ có liên quan đến Java như: Spring, JSF, Web Services, Unit Test, Hibernate, SQL, ...
Hi vọng góp được chút ít công sức cho sự phát triển cộng đồng Coder Việt.

Donate tác giả

Tìm kiếm các bài viết của GP Coder với Google Search

Liên hệ

Các bạn có thể liên hệ với tôi thông qua:
  • Trang liên hệ
  • Linkedin: gpcoder
  • Email: contact@gpcoder.com
  • Skype: ptgiang56it

Follow me

Copyright 2025 © GP Coder · All Rights Reserved · Giới thiệu · Chính sách · Điều khoản · Liên hệ ·

Share

Blogger
Delicious
Digg
Email
Facebook
Facebook messenger
Flipboard
Google
Hacker News
Line
LinkedIn
Mastodon
Mix
Odnoklassniki
PDF
Pinterest
Pocket
Print
Reddit
Renren
Short link
SMS
Skype
Telegram
Tumblr
Twitter
VKontakte
wechat
Weibo
WhatsApp
X
Xing
Yahoo! Mail

Copy short link

Copy link