首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring应用程序中使用RestTemplate从JSON中获取值

在Spring应用程序中使用RestTemplate从JSON中获取值
EN

Stack Overflow用户
提问于 2018-01-12 13:04:08
回答 2查看 3.5K关注 0票数 2

我试图解析JSON的值:

代码语言:javascript
复制
{"BTC_BCN":{"id":7,"last":"0.00000086","lowestAsk":"0.00000086","highestBid":"0.00000085","percentChange":"0.14666666","baseVolume":"368.86654762","quoteVolume":"498378738.00151879","isFrozen":"0","high24hr":"0.00000086","low24hr":"0.00000068"},"BTC_ETH":{"id":8,"last":"0.00003800","lowestAsk":"0.00003815","highestBid":"0.00003800","percentChange":"0.12326337","baseVolume":"34.17037464","quoteVolume":"955538.55551651","isFrozen":"0","high24hr":"0.00003883","low24hr":"0.00003221"}}

我感兴趣的值是"id":8,"last":"0.00003800"。我有豆类和RestTemplate:

代码语言:javascript
复制
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
    return builder.build();
}

以及每5秒通过API询问网站的

代码语言:javascript
复制
@Bean
public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
        return args -> {
            while(true)
            {
                BTC_Poloniex btc_poloniex = restTemplate.getForObject(
                        "https://poloniex.com/public?command=returnTicker", BTC_Poloniex.class);
                log.info(btc_poloniex.toString());
                TimeUnit.SECONDS.sleep(5);
            }           
        };
    }

类来读取以下值:

代码语言:javascript
复制
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class BTC_Poloniex {
private BTC_BCN BTC_BCN;

public BTC_Poloniex() {}


public BTC_BCN getBTC_BCN() {
    return BTC_BCN;
}

public void setBTC_BCN(BTC_BCN btc_bcn)
{
    this.BTC_BCN = btc_bcn;
}

@Override
public String toString() {
    return "BTC_Poloniex{" +
            "BTC_BCN=" + BTC_BCN +
            '}';
}
}

和类(我认为如果它是内部类的话会更好)

代码语言:javascript
复制
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class BTC_BCN {
private long id;
private long last;
private long lowestAsk;

public BTC_BCN(){}

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public long getLast() {
    return last;
}

public void setLast(long last) {
    this.last = last;
}

public long getLowestAsk() {
    return lowestAsk;
}

public void setLowestAsk(long lowestAsk) {
    this.lowestAsk = lowestAsk;
}

public String toString()
{
    return "BTC_BCN{" +
            " id='" + id + '\'' +
            " last'= " + last + '\'' +
            " lowestAsk'= " + lowestAsk + '\'' +
            '}';
}
}

当我试图获得这些值时,我总是使用null。

代码语言:javascript
复制
2018-01-12 14:00:14.829  INFO 18017 --- [           main] com.example.demo.BitbayApplication       : BTC_ETH{BTC_ETH=null}

为什么是这样?我可以轻松地阅读更简单的JSON,但对此有问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-13 14:46:23

简单的解决方案是使用地图。样品在下面。

使用此代码,您可以访问json中的每个字段:)

我希望我的解决方案对你来说足够好:)

代码语言:javascript
复制
@Service
public class RestTemplateService {

@Autowired
RestTemplate restTemplate;


public void getInfoFromPoloniex() {
    HashMap<String,Map> answer = restTemplate.getForObject("https://poloniex.com/public?command=returnTicker",
            new HashMap<>().getClass());

    answer.values().forEach(a -> System.out.println(a.toString()));

    System.out.println(answer.get("BTC_GAME").getClass().toString());

    answer.get("BTC_GAME").keySet().stream().forEach(k -> System.out.println(k.toString()));


}

}

票数 3
EN

Stack Overflow用户

发布于 2018-01-12 13:11:54

在BTC_Poloniex类中定义的变量

代码语言:javascript
复制
private BTC_ETH BTC_ETH;

应该是

代码语言:javascript
复制
    private BTC_ETH BTC_BCN;

因为json变量是

BTC_BCN

这应该与json类中的变量名称相同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48226867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档