Cùng nhau tìm hiểu khả năng tuyệt vời của Gson đem lại

Trên bài viết này chúng ta sẽ tìm hiểu phương pháp dùng chi tiết và những lợi ích mà Gson đem lại cho chúng ta tuyệt vời như thế nào. Bài viết tuy khá dài nhưng mình đã cố gắng việt hóa siêu nhiều từ khóa hello vọng điều ấy sẽ giúp cho người trải nghiệm, nhất là người trải nghiệm new tìm hiểu sẽ siêu dễ nắm bắt. Nào hãy cùng mình đi mổ xẻ vấn đề thôi

Trước lúc biết tới gson có thể người trải nghiệm đã từng Parse Json trong android bằng phương pháp tạo ra những đối tượng JSONObject hoặc JSONArray. Trường hợp như đối tượng json của chúng ta khá phức tạp thì công việc ấy trở nên siêu khó khăn, tốn thời kì và nhiều code hơn, làm dự án ta phình lên 1 phương pháp ko cần thiết.

Could mắn cho chúng ta là Google đã biết tới điều ấy và tạo ra 1 thư viện vô cùng mạnh mẽ trong việc chuyển đổi tự động động từ ‘Object’ sang ‘json’ và ngược lại. Nào chúng ta hãy khởi đầu tìm hiểu chức năng cụ thể của nó nào!

Chúng ta có những phương pháp sau đây để cài đặt nó:

  • Thứ 1: Phương pháp mình vẫn hay dùng nhất là dùng grandle đặt vào phần dependencies. implementation ‘com.google.code.gson:gson:2.8.5

Trên đây bạn có thể đánh giá model new nhất của nó tại đây: Github

  • Thứ 2: Dùng Maven:

<dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <model>2.8.5</model> <scope>compile</scope> </dependency> </dependencies>

3.1 Chuyển đổi hỗ trợ giữa Json và Java Object chưa bao giờ dễ tới thế

Trước tiên ta xem phương pháp chuyển đổi từ Object sang Json trước nhé. Dữ liệu mình đang dùng chỉ là pretend dưới native thôi nhé.

public class Person { String identify; String electronic mail; int age; boolean isDeveloper; public Person(String identify, String electronic mail, int age, boolean isDeveloper) { sentayho.com.vn = identify; sentayho.com.vn = electronic mail; sentayho.com.vn = age; sentayho.com.vnveloper = isDeveloper; } }

Đây là 1 class đơn giản mình đã tạo ra.

Tiếp theo thực hành khởi tạo 1 đối tượng Gson và parse object của chúng ta thành json nào.

Person person = new Person(“Solar”, “[email protected]”, “4”, true) Gson gson = new Gson(); String userJson = sentayho.com.vnon(person);

Và đây là kết quả sau khoản thời gian mình đã format cho người trải nghiệm dễ nhìn :

{ “age”: 4, “electronic mail”: “[email protected]”, “isDeveloper”: true, “identify”: “Solar” }

Quý khách có thể thấy phần json kết quả trả về có gì đặc biệt ko nào. Nó có { key : worth } key là tên thuộc tính và worth là phần giá trị mà ta khởi tạo tại trên. Trên đây là mình để mặc định nhé người trải nghiệm. Mình biết điều bạn đang thắc mắc nhưng để qua phần dưới nhé.

TIếp theo ta tìm hiểu phương pháp phương pháp chuyển đổi từ Json sang Object như thế nào nhé ! Ta có đoạn json:

String json = “”{“age”:4,”electronic mail”:”[email protected]”,” + “”isDeveloper”:true,”identify”:”Solar”}””

Nào tương tự động bước trên cùng tạo 1 đối tượng Gson và dùng phương thức fromJson để convert lại đối tượng của ta nào.

Gson gson = new Gson(); Person person = sentayho.com.vnJson(json, sentayho.com.vns);

Xem kết quả nào: 😂 Thực dễ dàng buộc phải ko mọi người.

3.2 Đối tượng lồng nhau thì làm cho thế nào ?

Ta có 1 lớp Handle như bên dưới:

public class Handle { personal String road; personal String houseNumber; personal String metropolis; personal String nation; public Handle(String road, String houseNumber, String metropolis, String nation) { sentayho.com.vn = road; sentayho.com.vneNumber = houseNumber; sentayho.com.vn = metropolis; sentayho.com.vntry = nation; } } public class NestedObject { personal String identify; personal String electronic mail; personal int age; personal boolean isDeveloper; personal Handle tackle; public NestedObject(String identify, String electronic mail, int age, boolean isDeveloper, Handle tackle) { sentayho.com.vn = identify; sentayho.com.vn = electronic mail; sentayho.com.vn = age; sentayho.com.vnveloper = isDeveloper; sentayho.com.vness = tackle; } }

Xem Thêm  Go Spherical là gì và cấu trúc cụm từ Go Spherical trong câu Tiếng Anh

Khởi đầu thực hành nào!!!

Handle tackle = new Handle(“ly thuong kiet”, “tang 4 FHome”, “Da Nang”, “Viet Nam”); NestedObject nestedObject = new NestedObject(“anh”, “[email protected]”, 22, true, tackle); String end result = new Gson().toJson(nestedObject);

Bạn khoan hãy nhìn kết quả và hãy tự động tưởng tượng thử nào ! Trên phần trên chúng ta đã thấy kết quả là nó sẽ parse nguyên 1 đối tượng sang json vậy thì thời điểm này} có thêm 1 đối tượng bên trong sẽ như thế nào? Và đây:

{ “userAddress”: { “metropolis”: “Da Nang”, “nation”: “Viet Nam”, “houseNumber”: “tang 4 FHome”, “road”: “ly thuong kiet” }, “age”: 22, “electronic mail”: “[email protected]”, “isDeveloper”: true, “identify”: “anh” }

Wow. thực tuyệt vời. 😍 Phần chuyển từ json trờ lại đối tượng ko khác gì phần trước người trải nghiệm tự động đánh giá nhé :

Gson gson = new Gson(); NestedObject nestedObject = new Gson().fromJson(json, sentayho.com.vns);

3.3 Chuyển đổi hỗ trợ của Array và Listing những Object:

Trong java có nhiều phương pháp để lưu trữ kiểu dữ liệu danh sách. Nhưng tại đây chúng ta đề cập tới 2 phương pháp ấy là Array và Listing. Từng dòng sẽ có sự khác nhau riêng trong việc parse qua json. Trong định dạng của json thì nó ko có khái niệm array và record. Vậy chỉ có sự khác biệt nằm tại phía java. Vậy thời điểm này} chúng ta hãy đi so sánh chúng qua 1 vài thí dụ bên dưới nhé. Chuyển đổi đối tượng sang json Cả array và record đều tương tự động như nhau nhé.

public class MenuItem { personal String description; personal float worth; public MenuItem(String description, float worth) { sentayho.com.vnription = description; sentayho.com.vn = worth; } }

Tạo 1 lớp Restaurant có 1 Listing những đối tượng MenuItem

public class Restaurant { personal String identify; personal Listing<MenuItem> menuItems; public Restaurant(String identify, Listing<MenuItem> menuItems) { sentayho.com.vn = identify; sentayho.com.vnItems = menuItems; } }

Xem kết quả nào

Listing<MenuItem> menuItems = new ArrayList<>(); sentayho.com.vn(new MenuItem(“egg”, 12.5f)); sentayho.com.vn(new MenuItem(“rooster”, 2.5f)); sentayho.com.vn(new MenuItem(“vegetable”, 7.5f)); sentayho.com.vn(new MenuItem(“pig”, 11.55f)); Restaurant menu = new Restaurant(“VN Meals”, menuItems); String json = new Gson().toJson(menu, sentayho.com.vns);

Cùng xem kết quả nào:

{ “menu”: [ { “description”: “egg”, “price”: 12.5 }, { “description”: “chicken”, “price”: 2.5 }, { “description”: “vegetable”, “price”: 7.5 }, { “description”: “pig”, “price”: 11.55 } ], “identify”: “VN Meals” }

Thứ tự động thuộc tính nó sắp xếp theo thứ tự động bảng chữ dòng nhé người trải nghiệm.

**Chuyển đổi json sang đối tượng **

Thí dụ có 1 file json như thế này:

[ { “name”: “Hoa Hong”, “count”: 1 }, { “name”: “Hoa Lan”, “count”: 3 }, { “name”: “Hoa Mai”, “count”: 2 } ]

Ta có 1 class tương ứng có json như sau:

public class Flower { @SerializedName(“identify”) personal String mName; @SerializedName(“rely”) personal int mCount; }

Trường hợp 1: Ta muốn trả về 1 mảng những đối tượng.

// file json mình đã để bên trên Flower[] flowers = new Gson().fromJson(json, (Sort) Flower[].class);

Trường hợp 2: Ta muốn trả về 1 record những đối tượng Chúng ta ko thể quản lý parse ra record những đối tượng từ json. Để cho Gson hiểu cấu trúc Listing ấy bạn buộc phải chỉ ra kiểu của nó. Thực là could mắn. Gson có 1 lớp TypeToken để giúp chúng ta tìm đúng kiểu của dữ liệu.

// file json tương tự động như trên nhé người trải nghiệm. Gson gson = new Gson(); Sort flowerList = new TypeToken<ArrayList<Flower>>(){}.getType(); Listing<Flower> founderList = sentayho.com.vnJson(json, flowerList);

Xem Thêm  Cypress Tutorials

Quý khách hãy tự động thử đánh giá nhé.

Query:Mình nghĩ có thể hẳn thời điểm này} người trải nghiệm đang phát sinh trong đầu 1 câu hỏi “file json là 1 đối tượng có chứa 1 danh sách merchandise thì sao”. Câu trả lời là ko thành vấn đề đối có Gson nhé người trải nghiệm. Nó có thể parse quản lý ra mà ko cần TypeToken nào. Thực là tiện dụng buộc phải ko người trải nghiệm.

3.4 Chuyển đổi giá trị null thì sao nhỉ?

Person person = new Person(null, “[email protected]”, 22, true); String json = new Gson().toJson(person); // ??

Đối có những thuộc tính có giá trị null thì Gson sẽ bỏ qua. Kết quả:

{“age”:22,”electronic mail”:”[email protected]”,”isDeveloper”:true}

Thế json trường hợp như ko có thuộc tính giống như đối tượng thì sẽ như thế nào

Câu trả lời là nó sẽ về giá trị mặc định theo từng kiểu dữ liệu. String là null, int là 0… Trường hợp còn thắc mắc về điều này mình khuyên người trải nghiệm nên xem lại những loại biến trong java.

3.5 Thay thế đổi tên những trường cho yêu thích có json

Trên những thí dụ trên mình đã để key của những area trong json là tên biến của lớp luôn. Điều ấy thì siêu bất tiện

  • thứ 1: về Code Type sẽ ko đúng chuẩn
  • thứ 2: lúc chúng ta vào dự án thực tế thì json sẽ phụ thuộc từ phía server. Mà chúng ta ko thể nào đặt tên giống hoàn toàn theo nó được. Để thực hành điều ấy ta dùng những chú thích @SerializedName để định nghĩa tên trường cho nó. Quay lại có thí dụ Person, thực hành 1 số thay thế đổi nhé người trải nghiệm.

personal String identify; //exchange by @SerializedName(worth = “identify”) personal String mName;

Wow. Giờ thì đúng chuẩn cơm mẹ nấu rồi nhé. 😅

Trên đây mình có 1 trường hợp phòng hờ cho người trải nghiệm, trường hợp như phía API vì 1 nguyên nhân nào ấy cùng trả về đối tượng ấy nhưng tên area của thuộc tính có chút thay thế đổi để yêu thích về mặt ngữ nghĩa của phía Backend. Thì phía chúng ta ko thể nào lấy được giá trị ấy buộc phải ko nào (phần 3.4) mình có đề cập tới vấn đề này rồi nhé. Nhắc lại là nó sẽ trả về thuộc tính của đối tượng là null trường hợp như ko có area trùng tên có @SerializedName() mình đã đặt nhé.

Những giải quyết là Gson tương trợ cho ta 1 thuộc tính thay thế thế alternate

@SerializedName(worth = “identify”, alternate = “other_name”)

Vậy là 1 việc trở nên đơn giản rồi nhé.

3.6 Phương pháp bỏ qua sự chuyển đổi của những area

Lại là 1 vấn đề hay nữa, có thể chắn 1 số bạn new tìm hiểu lúc đọc code của người khác sẽ thắc mắc từ khóa transient và @Expose là gì buộc phải ko? Thì đây chính là từ khóa để giải quyết vấn đề nêu trên transient

personal boolean transient mIsDeveloper;

Sẽ ko thể nào chuyển đổi hỗ trợ giữa đối tượng và json đối có thuộc tính này của Person nhé người trải nghiệm @Expose Tương tự động như transient nhưng nó có sự tùy thuộc} chỉnh nên siêu thuận tiện. Mình sẽ giải thích trong code bên dưới nhé

Xem Thêm  Những Điều Cần Biết Lúc New Chơi Bán Cạn – Thủy Sinh Xanh

@Expose() // Đây là kiểu mặc định và cho phép thực hành cả 2 sự chuyển đổi // việc bạn thêm 2 tham số (serialize = true, deserialize = true) thì cũng như vậy // và sẽ có lời nhắc từ IDE là hãy xóa đi @SerializedName(worth = “identify”, alternate = “other_name”) personal String mName; @Expose(deserialize = false) // Chỉ cho phép chúng ta chuyển từ đối tượng sang json thôi nhé @SerializedName(“electronic mail”) personal String mEmail;// equals serialize and never deserialize @Expose(serialize = false, deserialize = false) // dòng này y chang như transient người trải nghiệm ạ. 🙂 @SerializedName(“age”) personal int mAge; // neither serialize nor deserialize @Expose(serialize = false) // đoán xem nào @SerializedName(“isDeveloper”) personal boolean mIsDeveloper; // not serialize

Chưa xong đâu người trải nghiệm ạ, trường hợp đã dùng @Expose thì buộc phải nói cho Gson nó biết là mình dùng dòng này nữa Y chang như những thí dụ tại trên nhưng việc khởi tạo Gson có khác 1 chút nhé.

Gson gson = new Gson(); // thay thế thế bởi Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

GsonBuilder là 1 kiểu Design Patterns – Builder Sample. Nó giúp khởi tạo 1 đối tượng Gson bằng phương pháp gán giá trị cho từng thuộc tính của đối tượng.

Vậy là thời điểm này} nó đã làm cho việc rồi ấy người trải nghiệm!

3.7 Tùy thuộc} chỉnh đối tượng gson của chúng ta.

Có siêu nhiều kiểu tùy thuộc} chỉnh cho gson, lúc người trải nghiệm hài hòa có retrofit thì việc tùy thuộc} chỉnh sẽ sảy ra siêu thường xuyên. Trên đây mình có 1 thí dụ bé về tùy thuộc} chỉnh:

Gson gson = new GsonBuilder().serializeNulls().create();

Trên đây mình cũng khởi tạo 1 đối tượng Gson bằng builder như tại trên nhé. Quý khách đã biết là có những giá trị null thì mặc định Gson sẽ ko chuyển đổi nhưng có 1 đối tượng gson đã chuyển đổi như trên thì việc ấy ko còn đúng nữa nhé. Nó sẽ tạo ra area tương ứng có worth bằng null đấy.

3.8 Others

Tri thức về Gson thì siêu là nhiều. Việc chúng ta đang học tại đây nhằm có thể thực hành những việc thường gặp trong quy trình lập trình mà thôi nhé người trải nghiệm. Trường hợp trong 1 vài trường hợp đặc biệt thì mình xin đề xuất người trải nghiệm thêm 1 vài phần nữa về Gson:

  • Mappings of Map
  • Mappings of Set.
  • Gson with Lenient Vân vân và mây mây nữa nhé người trải nghiệm!

Thực là nhiều tri thức buộc phải ko người trải nghiệm. Mình cũng siêu cảm ơn người trải nghiệm đã đọc tới đây. Và mong người trải nghiệm sẽ nắm bắt được những điều cần thiết thiết sau :

  • Phương pháp parse object lớn json và ngược lại.
  • Phương pháp chuyển đổi đối có những đối tượng lồng nhau.
  • Sự khác biệt giữa chuyển đổi dữ liệu dùng Array và Listing.
  • Dùng những annoutation để công việc hiệu quả hơn.
  • Tùy thuộc} chỉnh đối tượng gson cho yêu thích có mong muốn của chúng ta.

Sở hữu những tri thức mình nêu tại trên siêu mong sẽ hữu ích có người trải nghiệm. Trường hợp có thắc mắc hoặc bất kì câu hỏi, ý kiến đóng góp nào xin mọi người hãy để lại bên dưới. Siêu mong sự đóng góp của bạn để bài viết được hoàn thiện phải chăng nhất. Xin cảm ơn.

Hyperlink mình đã tham khảo:

  • https://futurestud.io/tutorials/gson-getting-started-with-java-json-serialization-deserialization