2013-11-05 155 views
0

本质上获得空数据,这就是我想要返回的数据类型:从JSON对象

{ 
    "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 
     } 
     } 
    ] 
} 

的{ “价格”:10.0, “大小”:2.0 “;交换”: “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”对象,我看到listofmarketdatalists阵列中的每个元素是“空” 代替包含对象与这种格式:{“Bid”:{“Price”:10.0,“Size”:2.0,“ExchangeID”:“SMART”,“timeStamp”:0}, “Ask”:{“Price”:12.0, “:2.0”,交换ID “:” SMART”, “时间戳”:0}}。

任何意见都会很棒。

回答

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