为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Gson 反序列化未知 json

使用 Gson 反序列化未知 json

胡子哥哥 2021-09-15 15:28:23
我有一个免费的 api,用于使用 json 进行货币跟踪: api.coinmarketcap 我需要使用 Gson 库将这个 json 反序列化为我的复合 java 对象。这是我的模型对象:public class Quote {    @SerializedName("quotes")    private String mName;    @SerializedName("price")    private double mPrice;    public Quote(String name, double price) {        mName = name;        mPrice = price;    }    public String getName() {        return mName;    }    public double getPrice() {        return mPrice;    }}和:public class Currency {    private int mId;    private String mSymbol;    private byte mRank;    private String mWebsiteSlug;    private int mMaxSupply;    private Quote mQuote;    public Currency(int id, String symbol, byte rank, String websiteSlug, int maxSupply) {        mId = id;        mSymbol = symbol;        mRank = rank;        mWebsiteSlug = websiteSlug;        mMaxSupply = maxSupply;    }    public int getId() {        return mId;    }    public String getSymbol() {        return mSymbol;    }    public byte getRank() {        return mRank;    }    public String getWebsiteSlug() {        return mWebsiteSlug;    }    public int getMaxSupply() {        return mMaxSupply;    }    public Quote getQuote() {        return mQuote;    }}我不能用这种嵌套反序列化。
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

您可以在此处使用输入链接描述从 json 创建您的 pojo 类


查看完整回答
反对 回复 2021-09-15
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我创建货币反序列化器:


public class CurrencyDeserializer implements JsonDeserializer<Currency> {

    @Override

    public Currency deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {


        Currency currency = new Currency();


        JsonObject currencyObject = json.getAsJsonObject();


        JsonElement id = currencyObject.get("id");

        if(!id.isJsonNull()) {

            currency.setId(id.getAsInt());

        }


        JsonElement name = currencyObject.get("name");

        if(!name.isJsonNull()) {

            currency.setName(name.getAsString());

        }


        JsonElement symbol = currencyObject.get("symbol");

        if(!symbol.isJsonNull()) {

            currency.setSymbol(symbol.getAsString());

        }


        JsonElement slug = currencyObject.get("website_slug");

        if(!slug.isJsonNull()) {

            currency.setWebsiteSlug(slug.getAsString());

        }


        JsonElement rank = currencyObject.get("rank");

        if(!rank.isJsonNull()) {

            currency.setRank(rank.getAsLong());

        }


        JsonElement circulatingSupply = currencyObject.get("circulating_supply");

        if(!circulatingSupply.isJsonNull()) {

            currency.setCirculatingSupply(circulatingSupply.getAsLong());

        }


        JsonElement totalSupply = currencyObject.get("total_supply");

        if(!totalSupply.isJsonNull()) {

            currency.setTotalSupply(totalSupply.getAsLong());

        }


        JsonElement maxSupply = currencyObject.get("max_supply");

        if(!maxSupply.isJsonNull()) {

            currency.setMaxSupply(maxSupply.getAsLong());

        }


        JsonElement lastUpdated = currencyObject.get("last_updated");

        if(!lastUpdated.isJsonNull()) {

            Long l = lastUpdated.getAsLong() * 1000;

            currency.setLastUpdated(new Date(l));

        }


        JsonObject quotes = currencyObject.get("quotes").getAsJsonObject();


        for(Map.Entry<String, JsonElement> rootObj : quotes.entrySet())

        {

            Quote quote = context.deserialize(rootObj.getValue(), Quote.class);

            quote.setName(rootObj.getKey());

            currency.addQuote(quote);

        }


        return currency;

    }

}

简单和工作


查看完整回答
反对 回复 2021-09-15
  • 2 回答
  • 0 关注
  • 199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信