当前位置: 首页 > 知识库问答 >
问题:

使用可能返回不同数据的JSON

孙玺
2023-03-14

我想写一些java代码使用Spring引导消耗JSON数据从一个特定的endpoint。然而,对于每个请求,响应可能返回不同的数据字段。

{"success":true,"terms":"https:\/\/coinlayer.com\/terms","privacy":"https:\/\/coinlayer.com\/privacy","timestamp":1645616586,"target":"USD","rates":{"BTC":39049.424242}}
{"success":true,"terms":"https:\/\/coinlayer.com\/terms","privacy":"https:\/\/coinlayer.com\/privacy","timestamp":1645626666,"target":"USD","rates":{"BTC":39061.184046,"ETH":2726.545731}}
{"success":true,"terms":"https:\/\/coinlayer.com\/terms","privacy":"https:\/\/coinlayer.com\/privacy","timestamp":1645626966,"target":"USD","rates":{"ADA":0.939301,"BTC":39006.990707,"ETH":2720.502765}}

等等

下面是我当前的代码,它处理第一个案例。我可以写另一个Rates.java来满足第二个案例等等,但是我希望有一个Rates.java文件来处理所有可能的案例。

LiveData。JAVA

package com.example.consumingrest;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class LiveData {

    private Boolean success;
    private String terms;
    private String privacy;
    private Long timestamp;
    private String target;
    private Rates rates;

    public LiveData() {
    }

    public Boolean getSuccess() {
        return success;
    }

    public void setSuccess(Boolean success) {
        this.success = success;
    }

    public String getTerms() {
        return terms;
    }

    public void setTerms(String terms) {
        this.terms = terms;
    }

    public String getPrivacy() {
        return privacy;
    }

    public void setPrivacy(String privacy) {
        this.privacy = privacy;
    }

    public Long getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(Long timestamp) {
        this.timestamp = timestamp;
    }

    public String getTarget() {
        return target;
    }

    public void setTarget(String target) {
        this.target = target;
    }

    public Rates getRates() {
        return rates;
    }

    public void setValue(Rates rates) {
        this.rates = rates;
    }

    @Override
    public String toString() {
        return "LiveData{" +
                "success='" + success + '\'' +
                "terms='" + terms + '\'' +
                "privacy='" + privacy + '\'' +
                "timestamp='" + timestamp + '\'' +
                "target='" + target + '\'' +
                "rates=" + rates +
                '}';
    }
}

费率。JAVA

package com.example.consumingrest;
import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Rates {
    @JsonProperty(value = "BTC")
    private BigDecimal btc;

    public Rates() {
    }

    public BigDecimal getBTC() {
        return this.btc;
    }

    public void setId(BigDecimal btc) {
        this.btc = btc;
    }


    @Override
    public String toString() {
        return "{" +
                "BTC='" + btc + '\''+
                '}';
    }
}

消费Rest.java(主)

package com.example.consumingrest;

import java.time.LocalDate;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class ConsumingRestApplication {

    private static final Logger log = LoggerFactory.getLogger(ConsumingRestApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(ConsumingRestApplication.class, args);
    }

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }

    @Bean
    public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
        return args -> {
            LiveData liveData = restTemplate.getForObject(
                    "http://api.coinlayer.com/api/live?access_key=121a4df8b95fd5be872da3bad101cd73&target=EUR&symbols=BTC", LiveData.class);
            log.info(liveData.toString());
        };
    }
}

共有2个答案

景永春
2023-03-14

任何Json对象都可以解析为Map

冯永长
2023-03-14

如评论中所述,您似乎想要一张包含费率的地图:

@JsonIgnoreProperties(ignoreUnknown = true)
public class LiveData {
    ...
    private Map<String, BigDecimal> rates;

请参见映射动态JSON对象

 类似资料:
  • 我正在从第三方网站(家庭用电)检索JSON,根据我从网站请求的内容,返回的JSON可能是也可能不是数组。例如,如果我请求我的智能电表列表,我会得到这个(由于尺寸大,结果被截断): 其中 gwrcmd 是单个元素。 但是如果我要求过去半个小时的用电,我会得到这个: 看看 gwrcmd 现在是一个数组吗? 在我的Go应用程序中,我有一个类似这样的结构(再次,被截断,因为它持续了一段时间。“版本”下有更

  • 我正在使用Microsoft Graph Users API根据我们的ActiveDirectory验证用户名或电子邮件地址列表。名称搜索: https://graph.microsoft.com/v1.0/me/people/?$search=John.Smith 返回其他数据,如和。但如果我使用电子邮件搜索: null 我是否需要额外的权限来获取相同的数据? 更新:我按照下面的建议在https

  • 问题内容: 我正在从第三方网站(家庭用电)中检索JSON,并且根据我从该站点的要求,返回的JSON可能是数组,也可能不是数组。例如,如果我请求我的智能电表列表,则会得到以下信息(由于尺寸较大,结果被截断了): 其中 gwrcmd 是单个元素。 但是,如果我要求最近半小时用电,则会得到以下信息: 看看 gwrcmd 现在是一个数组吗? 在我的Go应用程序中,我有一个看起来像这样的结构(再次被截断了一

  • 我正在等待(从USSD请求中)检索一个值,以便返回它(getUSSD):

  • 我注意到,如果没有where(),returning()操作不可用。这是故意的吗? 这项工作: 这不起作用: 我应该考虑这个“黑客”吗?

  • 本文向大家介绍使用Django的JsonResponse返回数据的实现,包括了使用Django的JsonResponse返回数据的实现的使用技巧和注意事项,需要的朋友参考一下 urls.py 在views.py中创建show_view函数 到此这篇关于使用Django的JsonResponse返回数据的实现的文章就介绍到这了,更多相关Django JsonResponse内容请搜索呐喊教程以前的文