簡體   English   中英

使用Gson將JSON數組解析為Java列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM