[英]Use Gson to serialize complex set
我有一個方法setFriends()
,它需要一個 Set。 此方法在另一個模塊中,我想通過 Gson().fromJson() 發送setFriends()
序列化數據。 我不確定我的arg
字符串是否正確。 我嘗試了以下失敗的方法:
// my attempt to serialize
String arg = "[Friend[name=Dave, relationship=Relationship[Work]], Friend[name=Jack, relationship=Relationship[School]]]"; // not sure if this string is correct
Type type = new TypeToken<Set<Friend>>(){}.getType();
Set<Friend> payload = new Gson().fromJson(arg, type);
sendPayload(payload); // will send payload to People.setFriends()
// code from the other module:
Set<Friend>
public class People {
public void setFriends(Set<Friend> friends) { ... }
}
public class Friend {
String name;
Relationship relationship;
}
public enum Relationship {
School,
Work
}
Google Gson 是一個簡單的基於 Java 的庫,用於將 Java 對象序列化為 JSON,反之亦然。
在 JSON 中,我們使用{}
表示對象。 對於嵌套對象,我們使用"fieldName": {<nested object>}
。
在您的示例中,我將relationship
視為枚舉。 並引入Address
為嵌套的 object。 Friend
object 的 JSON 將如下所示:
{
"name" : "Dave",
"relationship" : "WORK",
"address" : {"street" : "s1"}
}
JSON 中沒有 Set 結構的表示形式,因此您將元素放入列表中。
以下是示例 java 代碼:
public class Test
{
public static void main(String[] args)
{
String arg = "["
+ "{\"name\":\"Dave\",\"relationship\":\"WORK\",\"address\":{\"street\":\"s1\"}},"
+ "{\"name\":\"Jack\",\"relationship\":\"SCHOOL\",\"address\":{\"street\":\"s2\"}},"
+ "{\"name\":\"Dave\",\"relationship\":\"GYM\",\"address\":{\"street\":\"s3\"}}"
+ "]";
Type type = new TypeToken<Set<Friend>>(){}.getType();
Set<Friend> payload = new Gson().fromJson(arg, type);
sendPayload(payload);
}
static void sendPayload(Set<Friend> plod) {
System.out.println("Sent payload: " + plod.toString());
}
}
class Friend {
private String name;
private Relationship relationship;
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getName() {
return name;
}
public Relationship getRelationship() {
return relationship;
}
public void setRelationship(Relationship relationship) {
this.relationship = relationship;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return this.name;
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public boolean equals(Object obj) {
return name.equals(obj.toString());
}
}
enum Relationship {
WORK, SCHOOL, GYM
}
class Address {
String street;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
Output:
Sent payload: [Dave, Jack]
在我的環境中 Gson 返回LinkedHashSet
object。 如果你想要不同的集合,比如排序的。 然后您可以將 Json 反序列化為List<Freind>
然后將其轉換為所需的集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.