0

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;
}

}

4

0 に答える 0