2012-06-08 47 views
0

我在磁盤上有一個非常大的.json文件。我想使用Jackson解析器將它作爲Java對象實例化。使用Jackson解析一個非模式化json的大文件?

文件看起來是這樣的:

[ { "prop1": "some_value", 
    "prop2": "some_other_value", 
    "something_random": [ 
     // ... arbitrary list of objects containing key/value 
     //  pairs of differing amounts and types ... 
    ] 
    }, 
    // ... repated many times ... 
    { 
    } 
] 

基本上它是對象的大數組,每個對象都有標識有兩個string屬性,然後另一對象的內部數組,其中每個對象屬性的隨機採集以及主要是字符串和整數的值,但也可能包含數組。

由於此對象佈局,我沒有可用於輕鬆實例化這些對象的集合模式。使用org.json處理器需要嘗試爲整個文件分配一個字符串,而這個字符串通常由於其大小而失敗。所以我想使用流解析器,但我完全不熟悉它。

我最終想要的是一個Map,其中String是prop1的值,SomeObject是保存整個對象(頂級數組入口)數據的東西。也許只有JSON可以在需要時再解析?

無論如何,有關如何編寫代碼的想法是受歡迎的。

回答

3

由於您不想將整個事物作爲單個對象進行綁定,因此您可能需要使用readValues()方法ObjectReader。如果單個值的結構是通用的,你可能想要將它們綁定爲java.util.Map或者JsonNode(傑克遜的樹模型)。所以你會這樣做:

ObjectMapper mapper = new ObjectMapper(); 
ObjectReader reader = mapper.reader(Map.class); // or JsonNode.class 
MappingIterator<Map> it = reader.readValues(new File("stuff.json")); 
while (it.hasNextValue()) { 
    Map m = it.nextValue(); 
    // do something; like determine real type to use and: 
    OtherType value = mapper.convertValue(OtherType.class); 
} 

遍歷整個事情。