簡體   English   中英

如何從 IEX Cloud 批處理端點反序列化 JSON 數據

[英]How to deserialize JSON data from an IEX Cloud batch endpoint

我正在從 IEX Cloud 批處理端點請求數據。 該請求包含一個帶有多個交易品種的查詢字符串,並返回相關的市場數據。 為了使問題更簡單,我只顯示了下面響應的一個子集。 我還使用https://www.jsonschema2pojo.org/自動構建我的 POJO 並在請求下方顯示。 我的請求在示例中包含一批 AAPL 和 FB 的符號,但它可以包含任意數量的用戶選擇的符號。 考慮到響應的結構,如何創建通用符號 POJO? 正如您在下面看到的,JSONSchema 為每個符號(例如 Aapl POJO 和 FB POJO)創建一個 POJO,但我並不總是知道請求的是什么符號或它們中有多少個。

來自批處理符號請求的 IEX 雲響應。

{
    "AAPL": {
        "quote": {
            "symbol": "AAPL",
            "latestPrice": 133.985
        }
    },
    "FB": {
        "quote": {
            "symbol": "FB",
            "latestPrice": 339.13
        }
    }
}

由 JSONSchema.org 構建的 POJO。

-----------------------------------com.example.Aapl.java-----------------------------------

package com.example;

import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"quote"
})
@Generated("jsonschema2pojo")
public class Aapl {

@JsonProperty("quote")
public Quote quote;

}
-----------------------------------com.example.Fb.java-----------------------------------

package com.example;

import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"quote"
})
@Generated("jsonschema2pojo")
public class Fb {

@JsonProperty("quote")
public Quote__1 quote;

}
-----------------------------------com.example.Quote.java-----------------------------------

package com.example;

import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"symbol",
"latestPrice"
})
@Generated("jsonschema2pojo")
public class Quote {

@JsonProperty("symbol")
public String symbol;
@JsonProperty("latestPrice")
public Double latestPrice;

}
-----------------------------------com.example.Quote__1.java-----------------------------------

package com.example;

import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"symbol",
"latestPrice"
})
@Generated("jsonschema2pojo")
public class Quote__1 {

@JsonProperty("symbol")
public String symbol;
@JsonProperty("latestPrice")
public Double latestPrice;

}
-----------------------------------com.example.Security.java-----------------------------------

package com.example;

import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"AAPL",
"FB"
})
@Generated("jsonschema2pojo")
public class Security {

@JsonProperty("AAPL")
public Aapl aapl;
@JsonProperty("FB")
public Fb fb;

}

"AAPL""FB"動態字段名稱,因此您不能使用類的固定名稱字段來映射它們,而應該使用根對象中的Map<String, ...>字段。

"AAPL""FB"是相同的結構,即具有名為quote的字段的對象,因此您需要一個與之匹配的類。

quote的值是一個對象,它有兩個名為symbollatestPrice字段,因此您需要一個latestPrice匹配的類。

class Root {
    private Map<String, Stock> stocks = new LinkedHashMap<>();

    @JsonAnyGetter
    public Map<String, Stock> getStocks() {
        return this.stocks;
    }

    @JsonAnySetter
    public void addStock(String name, Stock value) {
        this.stocks.put(name, value);
    }
}
class Stock {
    private Quote quote;

    public Quote getQuote() {
        return this.quote;
    }

    public void setQuote(Quote quote) {
        this.quote = quote;
    }
}
class Quote {
    private String symbol;
    private BigDecimal latestPrice;

    public String getSymbol() {
        return this.symbol;
    }

    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    public BigDecimal getLatestPrice() {
        return this.latestPrice;
    }

    public void setLatestPrice(BigDecimal latestPrice) {
        this.latestPrice = latestPrice;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM