2013-03-28 60 views
2

我有一個android應用程序,解析json塊大約需要250ms。它包含一個數組,我只需要立即可用的前6-7個值。我真的需要加快處理這些數據。結合傑克遜對象映射和流解析

我有一個數據結構,基本上是這樣的:

class Data { 
    List<Map> data = objectmapper_readvalue_data; 

    public HashMap getItem(int i) { 
     return data.get(i); 
    } 
} 

我真的很希望能夠做這樣的事情了JsonParser: 類數據{ 列表數據=新名單(); JsonParser p;

public HashMap getItem(int i) { 
     while (data.length < i) { 
      data.append(p.parseOneBlockOfData()); 
     } 
     return data.get(i); 
    } 
} 

而且只有第5-6值將在第一解析渲染,其他人我可以處理更高版本。但是,我錯過了「parseOneBlockOfData」函數。當然,我可以使用StringBuilder緩存解析中的每個值,直到找到下一個完整的塊,然後使用objectParser或那個,但我不確定性能會是什麼樣子。

有沒有這樣做的非hackish方式?

回答

4

櫃面任何人網上搜尋此:

JsonParser parser = objectMapper.getFactory().createJsonParser(inputStream); 

// Keep going until we find filters: 
String fieldName = null; 
JsonToken token = null; 
while (!"filters".equals(fieldName)) { 
    token = parser.nextToken(); 
    while (token != JsonToken.START_ARRAY) { 
     token = parser.nextToken(); 
    } 
    fieldName = parser.getCurrentName(); 
} 
// We're at the filters node 

while (parser.nextToken() == JsonToken.START_OBJECT) { 
    Map x = objectMapper.readValue(parser, Map.class); 
}