首页 > 解决方案 > 无法反序列化狗 API

问题描述

有json

{
  "message":{
      "affenpinscher":[],
      "african":[],
      "bulldog":["boston","french"],
      ...
      "retriever":["chesapeake","curly","flatcoated","golden"]
      ...
      "wolfhound":["irish"]
    }
}

https://dog.ceo/api/breeds/list/all

我正在尝试将其反序列化为 <Map<String, List<String>>> 这是我的反序列化器:

public class BreedDeserializer implements JsonDeserializer<Map<String, List<String>>> {

    @Override
    public Map<String, List<String>> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        final JsonObject jsonObject = json.getAsJsonObject();

        Type type = new TypeToken<Map<String, List<String>>>(){}.getType();
        Map<String, List<String>> dogBreeds = context.deserialize(jsonObject.get("message"), type);

        return dogBreeds;
    }

不幸的是它返回null。我检查了json字符串,它确实存在。任何人都可以帮助我吗?

非常感谢!

标签: androidjsongson

解决方案


试试这个像这样创建pojo

Test

public class Test {

    @SerializedName("status")
    @Expose
    private String status;
    @SerializedName("message")
    @Expose
    private Message message;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Message getMessage() {
        return message;
    }

    public void setMessage(Message message) {
        this.message = message;
    }

}

Message

public class Message {

    @SerializedName("affenpinscher")
    @Expose
    private List<Object> affenpinscher = null;
    @SerializedName("african")
    @Expose
    private List<Object> african = null;
    @SerializedName("airedale")
    @Expose
    private List<Object> airedale = null;
    @SerializedName("akita")
    @Expose
    private List<Object> akita = null;
    @SerializedName("appenzeller")
    @Expose
    private List<Object> appenzeller = null;
    @SerializedName("basenji")
    @Expose
    private List<Object> basenji = null;
    @SerializedName("beagle")
    @Expose
    private List<Object> beagle = null;
    @SerializedName("bluetick")
    @Expose
    private List<Object> bluetick = null;
    @SerializedName("borzoi")
    @Expose
    private List<Object> borzoi = null;
    @SerializedName("bouvier")
    @Expose
    private List<Object> bouvier = null;
    @SerializedName("boxer")
    @Expose
    private List<Object> boxer = null;
    @SerializedName("brabancon")
    @Expose
    private List<Object> brabancon = null;
    @SerializedName("briard")
    @Expose
    private List<Object> briard = null;
    @SerializedName("bulldog")
    @Expose
    private List<String> bulldog = null;
    @SerializedName("bullterrier")
    @Expose
    private List<String> bullterrier = null;
    @SerializedName("cairn")
    @Expose
    private List<Object> cairn = null;
    @SerializedName("cattledog")
    @Expose
    private List<String> cattledog = null;
    @SerializedName("chihuahua")
    @Expose
    private List<Object> chihuahua = null;
    @SerializedName("chow")
    @Expose
    private List<Object> chow = null;
    @SerializedName("clumber")
    @Expose
    private List<Object> clumber = null;
    @SerializedName("collie")
    @Expose
    private List<String> collie = null;
    @SerializedName("coonhound")
    @Expose
    private List<Object> coonhound = null;
    @SerializedName("corgi")
    @Expose
    private List<String> corgi = null;
    @SerializedName("cotondetulear")
    @Expose
    private List<Object> cotondetulear = null;
    @SerializedName("dachshund")
    @Expose
    private List<Object> dachshund = null;
    @SerializedName("dalmatian")
    @Expose
    private List<Object> dalmatian = null;
    @SerializedName("dane")
    @Expose
    private List<String> dane = null;
    @SerializedName("deerhound")
    @Expose
    private List<String> deerhound = null;
    @SerializedName("dhole")
    @Expose
    private List<Object> dhole = null;
    @SerializedName("dingo")
    @Expose
    private List<Object> dingo = null;
    @SerializedName("doberman")
    @Expose
    private List<Object> doberman = null;
    @SerializedName("elkhound")
    @Expose
    private List<String> elkhound = null;
    @SerializedName("entlebucher")
    @Expose
    private List<Object> entlebucher = null;
    @SerializedName("eskimo")
    @Expose
    private List<Object> eskimo = null;
    @SerializedName("germanshepherd")
    @Expose
    private List<Object> germanshepherd = null;
    @SerializedName("greyhound")
    @Expose
    private List<String> greyhound = null;
    @SerializedName("groenendael")
    @Expose
    private List<Object> groenendael = null;
    @SerializedName("hound")
    @Expose
    private List<String> hound = null;
    @SerializedName("husky")
    @Expose
    private List<Object> husky = null;
    @SerializedName("keeshond")
    @Expose
    private List<Object> keeshond = null;
    @SerializedName("kelpie")
    @Expose
    private List<Object> kelpie = null;
    @SerializedName("komondor")
    @Expose
    private List<Object> komondor = null;
    @SerializedName("kuvasz")
    @Expose
    private List<Object> kuvasz = null;
    @SerializedName("labrador")
    @Expose
    private List<Object> labrador = null;
    @SerializedName("leonberg")
    @Expose
    private List<Object> leonberg = null;
    @SerializedName("lhasa")
    @Expose
    private List<Object> lhasa = null;
    @SerializedName("malamute")
    @Expose
    private List<Object> malamute = null;
    @SerializedName("malinois")
    @Expose
    private List<Object> malinois = null;
    @SerializedName("maltese")
    @Expose
    private List<Object> maltese = null;
    @SerializedName("mastiff")
    @Expose
    private List<String> mastiff = null;
    @SerializedName("mexicanhairless")
    @Expose
    private List<Object> mexicanhairless = null;
    @SerializedName("mix")
    @Expose
    private List<Object> mix = null;
    @SerializedName("mountain")
    @Expose
    private List<String> mountain = null;
    @SerializedName("newfoundland")
    @Expose
    private List<Object> newfoundland = null;
    @SerializedName("otterhound")
    @Expose
    private List<Object> otterhound = null;
    @SerializedName("papillon")
    @Expose
    private List<Object> papillon = null;
    @SerializedName("pekinese")
    @Expose
    private List<Object> pekinese = null;
    @SerializedName("pembroke")
    @Expose
    private List<Object> pembroke = null;
    @SerializedName("pinscher")
    @Expose
    private List<String> pinscher = null;
    @SerializedName("pointer")
    @Expose
    private List<String> pointer = null;
    @SerializedName("pomeranian")
    @Expose
    private List<Object> pomeranian = null;
    @SerializedName("poodle")
    @Expose
    private List<String> poodle = null;
    @SerializedName("pug")
    @Expose
    private List<Object> pug = null;
    @SerializedName("puggle")
    @Expose
    private List<Object> puggle = null;
    @SerializedName("pyrenees")
    @Expose
    private List<Object> pyrenees = null;
    @SerializedName("redbone")
    @Expose
    private List<Object> redbone = null;
    @SerializedName("retriever")
    @Expose
    private List<String> retriever = null;
    @SerializedName("ridgeback")
    @Expose
    private List<String> ridgeback = null;
    @SerializedName("rottweiler")
    @Expose
    private List<Object> rottweiler = null;
    @SerializedName("saluki")
    @Expose
    private List<Object> saluki = null;
    @SerializedName("samoyed")
    @Expose
    private List<Object> samoyed = null;
    @SerializedName("schipperke")
    @Expose
    private List<Object> schipperke = null;
    @SerializedName("schnauzer")
    @Expose
    private List<String> schnauzer = null;
    @SerializedName("setter")
    @Expose
    private List<String> setter = null;
    @SerializedName("sheepdog")
    @Expose
    private List<String> sheepdog = null;
    @SerializedName("shiba")
    @Expose
    private List<Object> shiba = null;
    @SerializedName("shihtzu")
    @Expose
    private List<Object> shihtzu = null;
    @SerializedName("spaniel")
    @Expose
    private List<String> spaniel = null;
    @SerializedName("springer")
    @Expose
    private List<String> springer = null;
    @SerializedName("stbernard")
    @Expose
    private List<Object> stbernard = null;
    @SerializedName("terrier")
    @Expose
    private List<String> terrier = null;
    @SerializedName("vizsla")
    @Expose
    private List<Object> vizsla = null;
    @SerializedName("weimaraner")
    @Expose
    private List<Object> weimaraner = null;
    @SerializedName("whippet")
    @Expose
    private List<Object> whippet = null;
    @SerializedName("wolfhound")
    @Expose
    private List<String> wolfhound = null;


    public List<String> getBulldog() {
        return bulldog;
    }

    public void setBulldog(List<String> bulldog) {
        this.bulldog = bulldog;
    }

    public List<String> getTerrier() {
        return terrier;
    }

    public void setTerrier(List<String> terrier) {
        this.terrier = terrier;
    }

    public List<String> getHound() {
        return hound;
    }

    public void setHound(List<String> hound) {
        this.hound = hound;
    }

    // generate all getter setter here
}

比这样使用

        String apiResponse=readJSONFromAsset();
        Gson gson = new GsonBuilder().create();
        Test resultObj = gson.fromJson(apiResponse, Test.class);

        Message message= resultObj.getMessage();
        for (int i=0;i<message.getBulldog().size();i++){
            Log.e("getBulldog",message.getBulldog().get(i));
        }

        for (int i=0;i<message.getTerrier().size();i++){
            Log.e("getTerrier",message.getTerrier().get(i));
        }

        for (int i=0;i<message.getHound().size();i++){
            Log.e("getHound",message.getHound().get(i));
        }

推荐阅读