[英]Parsing JSON Array to Java List Using Gson
從給定的JSON
生成SimpleTestClass
類型的List
的最佳方法是什么,其中還為設置了代碼的JSON
中的recipients
數組中的值提供了一個新的SimpleTestClass
對象。
public class SimpleTestClass{
String code;
String recipient;
}
JSON
有效負載:
{
"code": 123,
"recipients": [
"888888",
"222222"
]
}
如果JSON
結構不適合POJO
模型,則需要編寫自定義反序列化器或創建適合JSON
的新POJO
模型,並在反序列化過程后將其轉換為所需模型。 在下面,您可以找到帶有自定義反序列化器的解決方案,該解決方案使您可以非常靈活地處理給定的JSON
:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.JsonAdapter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class GsonApp {
public static void main(String[] args) {
String json = "{\"code\": 123,\"recipients\": [\"888888\",\"222222\"]}";
Gson gson = new GsonBuilder().create();
List<Recipient> recipients = gson.fromJson(json, Recipients.class).getRecipients();
recipients.forEach(System.out::println);
}
}
class RecipientsJsonDeserializer implements JsonDeserializer<Recipients> {
@Override
public Recipients deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
List<Recipient> recipients = new ArrayList<>();
JsonObject root = json.getAsJsonObject();
String code = root.get("code").getAsString();
JsonArray recipientsArray = root.getAsJsonArray("recipients");
recipientsArray.forEach(item -> {
recipients.add(new Recipient(code, item.getAsString()));
});
return new Recipients(recipients);
}
}
@JsonAdapter(RecipientsJsonDeserializer.class)
class Recipients {
private final List<Recipient> recipients;
public Recipients(List<Recipient> recipients) {
this.recipients = recipients;
}
// getters, toString
}
class Recipient {
private final String code;
private final String recipient;
public Recipient(String code, String recipient) {
this.code = code;
this.recipient = recipient;
}
// getters, toString
}
上面的代碼打印:
Recipient{code='123', recipient='888888'}
Recipient{code='123', recipient='222222'}
class SimpleTestClass {
String code;
List<String> recipients;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<String> getRecipients() {
return recipients;
}
public void setRecipients(List<String> recipients) {
this.recipients = recipients;
}
}
public class ServerMain {
public static void main(String[] args) {
Gson g = new Gson();
SimpleTestClass class = g.fromJson(json, SimpleTestClass.class);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.