API 経由で表示される JSON オブジェクトを取得しようとしていますが、エラー メッセージが表示されます。
ここに私が書いた方法があります:
public MarketDataListLevel1 getMarketDataTicker() {
try {
MarketDataListLevel1 md = CS.getMarketDataTicker();
log.info(md.toString());
return md;
}
catch ( Exception e) {
e.printStackTrace();
return null;
}
}
CS は、URL からの JSON データを処理するオブジェクトです。
何らかの理由で、そのメソッドを呼び出すと、必要な正確な出力が得られますが、その後にこれらの追加のエラー メッセージも表示されます。その理由はわかりません。どんな助けでも大歓迎です。
14:52:55.265 [default] [main] ERROR si.mazi.rescu.JSONUtils - Error unmarshalling from
json: {"Bid":{"Price":183.25,"Size":0.0,"ExchangeID":"SMART","timeStamp":0},"Ask":{"Price":185.0,"Size":0.0,"ExchangeID":"SMART","timeStamp":0},"Last":{"Price":182.44,"Size":4.0,"ExchangeID":"SMART","timeStamp":0}}
java.lang.RuntimeException: Problem getting JSON object
at (Skipped all these logs)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.xeiam.xchange.cs.dto.MarketData[] out of START_OBJECT token
at [Source: java.io.StringReader@5069bb01; line: 1, column: 2]
これは、私が返したいデータの形式です:
{"Bid":{"Price":204.08,"Size":1.0,"ExchangeID":"SMART","timeStamp":0},
"Ask":{"Price":203.2,"Size":0.0,"ExchangeID":"SMART","timeStamp":0},
"Last":{"Price":204.64,"Size":2.0,"ExchangeID":"SMART","timeStamp":0}}
そして、それを満たしているようです。
MarketDataLevel1 は次のように定義されます。
public class MarketDataListLevel1 {
public MarketData[] MarketDataListLast;
public MarketData[] MarketDataListBid;
public MarketData[] MarketDataListAsk;
public MarketDataListLevel1(@JsonProperty("Bid") MarketData[] MarketDataListBid,@JsonProperty("Ask") MarketData[] MarketDataListAsk,@JsonProperty("Last") MarketData[] MarketDataListLast) {
this.MarketDataListBid = MarketDataListBid;
this.MarketDataListAsk = MarketDataListAsk;
this.MarketDataListLast = MarketDataListLast;
}
そしてMarketDataとして
public class MarketData {
public BigDecimal Price;
public BigDecimal Size;
public String ExchangeID;
public long timeStamp;
public MarketData(
@JsonProperty("Price") BigDecimal Price,
@JsonProperty("Size") BigDecimal Size,
@JsonProperty("ExchangeID") String ExchangeID,
@JsonProperty("timeStamp") long timeStamp) {
this.Price = Price;
this.Size = Size;
this.ExchangeID = ExchangeID;
this.timeStamp = timeStamp;
}
}