0

基本的に、これは私が返したい種類のデータです:

{
   "Top10BidAsks":[
      {
         "Bid":{
            "Price":10.0,
            "Size":2.0,
            "ExchangeID":"SMART",
            "timeStamp":0
         },
         "Ask":{
            "Price":12.0,
            "Size":2.0,
            "ExchangeID":"SMART",
            "timeStamp":0
         }
      },
      {
         "Bid":{
            "Price":0.0,
            "Size":0.0,
            "ExchangeID":"SMART",
            "timeStamp":0
         },
         "Ask":{
            "Price":13.0,
            "Size":12.0,
            "ExchangeID":"SMART",
            "timeStamp":0
         }
      }
   ]
}

{"Price":10.0,"Size":2.0,"ExchangeID":"SMART","timeStamp":0} は、基本的に、これら 4 つのフィールドで作成した MarketData オブジェクトを表します。

私が呼び出している主な機能は次のとおりです。

public MarketDataListLevel2 getMarketDataDepth() {
    try {
        MarketDataListLevel2 md = cs.getMarketDataDepth();
        log.info(md.toString());
        return md;
     }
     catch ( Exception e) {
        ....
     }
}

cs は、サイトから JSON データを取得する単なるインターフェイスです。

MarketDataLevel2 オブジェクトは次のとおりです。

public class MarketDataListLevel2 {

public static class MarketDataList {
    public MarketData[] a;
}

public MarketDataList[] listofmarketdatalists;

public MarketDataListLevel2(@JsonProperty("Top10BidAsks") MarketDataList[] listofmarketdatalists) {
    this.listofmarketdatalists = listofmarketdatalists;
}

このオブジェクトを必要な出力と一致させようとしましたが (書式設定に関して)、返されるデータが得られないため、明らかにデータ構造エラーが発生している可能性があります。

リストした最初のメソッドを実行すると:

MarketDataListLevel2 a = getDepthMarketData(coin);

この「a」オブジェクトをデバッグすると、{"Bid":{"Price":10.0,"Size":2.0," という形式のオブジェクトが含まれているのではなく、listofmarketdatalists 配列の各要素が「null」になっていることがわかります。 ExchangeID":"SMART","timeStamp":0}, "Ask":{"Price":12.0,"Size":2.0,"ExchangeID":"SMART","timeStamp":0}}.

どんなアドバイスも素晴らしいでしょう。

4

1 に答える 1

1

JSON を表す正しい POJO クラスを作成する必要があります。以下の例を参照してください。

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonProgram {

    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        Root root = mapper.readValue(json, Root.class);
        System.out.println(root.getTop10());
    }
}

class Root {

    @JsonProperty("Top10BidAsks")
    private List<MarketDataEntity> top10;

    public List<MarketDataEntity> getTop10() {
        return top10;
    }

    public void setTop10(List<MarketDataEntity> top10) {
        this.top10 = top10;
    }
}

class MarketDataEntity {

    private Map<String, MarketData> datas = new HashMap<String, MarketData>();

    @JsonAnySetter
    public void setMarketData(String key, MarketData data) {
        datas.put(key, data);
    }

    @Override
    public String toString() {
        return datas.toString();
    }
}

class MarketData {

    @JsonProperty("Price")
    private BigDecimal price;

    @JsonProperty("Size")
    private BigDecimal size;

    @JsonProperty("ExchangeID")
    private String exchangeId;

    private int timeStamp;

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public BigDecimal getSize() {
        return size;
    }

    public void setSize(BigDecimal size) {
        this.size = size;
    }

    public String getExchangeId() {
        return exchangeId;
    }

    public void setExchangeId(String exchangeId) {
        this.exchangeId = exchangeId;
    }

    public int getTimeStamp() {
        return timeStamp;
    }

    public void setTimeStamp(int timeStamp) {
        this.timeStamp = timeStamp;
    }

    @Override
    public String toString() {
        return "MarketData [price=" + price + ", size=" + size + ", exchangeId=" + exchangeId + ", timeStamp=" + timeStamp + "]";
    }
}

上記のプログラムは次のように出力します:

[{Bid=MarketData [price=10.0, size=2.0, exchangeId=SMART, timeStamp=0], Ask=MarketData [price=12.0, size=2.0, exchangeId=SMART, timeStamp=0]}, {Bid=MarketData [price=0.0, size=0.0, exchangeId=SMART, timeStamp=0], Ask=MarketData [price=13.0, size=12.0, exchangeId=SMART, timeStamp=0]}]
于 2013-11-05T08:53:02.177 に答える