繁体   English   中英

使用 Java 中的 GSON 反序列化 json

[英]Deserializing json with GSON in Java

我有 Json

{"0x3b198e26e473b8fab2085b37978e36c9de5d7f68":{"usd":541.56},"0x54523d5fb56803bac758e8b10b321748a77ae9e9":{"usd":0.059097},"0x330540a9d998442dcbc396165d3ddc5052077bb1":{"usd":1.649e-09}}

接下来,我正在使用 gson 尝试将 json 转换为价格 object

        RequestEntity requestEntity = new RequestEntity(requestHeaders, HttpMethod.valueOf("GET"), uri);
        restTemplate.exchange(requestEntity, String.class);
        ResponseEntity<String> responseEntity = restTemplate.exchange(requestEntity, String.class);
        String response = responseEntity.getBody();
        System.out.println(response);

        Gson gson = new Gson();
        Price price = gson.fromJson(response, Price.class);

价格.java

  public class Price {
        private Wallet wallet;
        private Wallet token;
        private Wallet contract;
    
        public Wallet getWallet() {
            return wallet;
        }
    
        public void setWallet(Wallet wallet) {
            this.wallet = wallet;
        }
    
        public Wallet getToken() {
            return token;
        }
    
        public void setToken(Wallet token) {
            this.token = token;
        }
    
        public Wallet getContract() {
            return contract;
        }
    
        public void setContract(Wallet contract) {
            this.contract = contract;
        }
    }

钱包.java

public class Wallet {
    private Currencies currencies;

    public Currencies getCurrencies() {
        return currencies;
    }

    public void setCurrencies(Currencies currencies) {
        this.currencies = currencies;
    }
}

货币.java

public class Currencies {
    String currency;
    Integer value;

    public String getCurrency() {
        return currency;
    }

    public void setCurrency(String currency) {
        this.currency = currency;
    }

    public Integer getValue() {
        return value;
    }

    public void setValue(Integer value) {
        this.value = value;
    }
}

I need to name the class fields " 0x3b198e26e473b8fab2085b37978e36c9de5d7f68 ", " 0x54523d5fb56803bac758e8b10b321748a77ae9e9 " and " 0x330540a9d998442dcbc396165d3dbb150 "? 如果是这样,这些不是有效的名称。

否则我在调用时得到 null

        System.out.println(price.getWallet());

我希望你可以在这里使用自定义反序列化器

像这样为 Gson 注册它们:

GsonBuilder gsonBldr = new GsonBuilder();
gsonBldr.registerTypeAdapter(Price.class, new PriceCustomDeserializer());
gsonBldr.registerTypeAdapter(Wallet.class, new WalletCustomDeserializer());
gsonBldr.registerTypeAdapter(Currencies.class, new CurrenciesCustomDeserializer());

和反序列化器实现:

public class PriceCustomDeserializer implements JsonDeserializer<Price> {

    @Override
    public Price deserialize
      (JsonElement jElement, Type typeOfT, JsonDeserializationContext context) 
      throws JsonParseException {
        JsonObject jObject = jElement.getAsJsonObject();
        //parse 3 values (without names) from json by order 
    }
}

//add remaining 2 deserializers 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM