2013-03-06 51 views
0

我有用於解析和管理的非常大的JSON文件。我的JSON文件中包含這樣ANDROID使用Jackson庫:如何使用索引加載對象 - 範圍從

[ 
{"id": "11040548","key1":"keyValue1","key2":"keyValue2","key3":"keyValue3","key4":"keyValue4","key5":"keyValue5","key6":"keyValue6","key7":"keyValue7","key8":"keyValue8","key9":"keyValue9","key10":"keyValue10","key11":"keyValue11","key12":"keyValue12","key13":"keyValue13","key14":"keyValue14","key15":"keyValue15" 
}, 
{"id": "11040549","key1":"keyValue1","key2":"keyValue2","key3":"keyValue3","key4":"keyValue4","key5":"keyValue5","key6":"keyValue6","key7":"keyValue7","key8":"keyValue8","key9":"keyValue9","key10":"keyValue10","key11":"keyValue11","key12":"keyValue12","key13":"keyValue13","key14":"keyValue14","key15":"keyValue15" 
}, 
.... 
{"id": "11040548","key1":"keyValue1","key2":"keyValue2","key3":"keyValue3","key4":"keyValue4","key5":"keyValue5","key6":"keyValue6","key7":"keyValue7","key8":"keyValue8","key9":"keyValue9","key10":"keyValue10","key11":"keyValue11","key12":"keyValue12","key13":"keyValue13","key14":"keyValue14","key15":"keyValue15" 
} 
] 

我的JSON文件包含有關新聞網站和幾乎每天這個JSON文件將得到大幅提升的話題數據結構。

對於文件的解析我用

URL urlLinkSource = new URL(OUTBOX_URL); 
urlLinkSourceReader = new BufferedReader(new InputStreamReader(
         urlLinkSource.openStream(), "UTF-8")); 
ObjectMapper mapper = new ObjectMapper(); 
List<DataContainerList> DataContainerListData = mapper.readValue(urlLinkSourceReader,new TypeReference<List<DataContainerList>>() { }); //DataContainerList contains id, key1, key2, key3..key15 

我的問題是,我想在這行加載

List<DataContainerList> DataContainerListData = mapper.readValue(urlLinkSourceReader,new TypeReference<List<DataContainerList>>() { }); 

只JSON對象的範圍 - 只是前十點的對象,只是二十來分鐘對象 - 因爲我需要在我的應用程序中以分頁模式顯示10條新聞(所有時間我都知道需要顯示的索引10)。它完全支持加載10 000個對象,並只重複前10個對象。所以我的問題是如何在類似的方式加載 像這樣的:

List<DataContainerList> DataContainerListData = mapper.readValue(urlLinkSourceReader,new TypeReference<List<DataContainerList>>() { }); 

只指數(例如30至40),而在整個JSON文件中的所有對象的裝載物體擋住-TO?

問候

+0

尋呼模式真的是一個不好的做法。把它放在一個裝載器中,這樣當你詢問時加載。 – njzk2 2013-03-06 16:37:32

+0

這裏的問題似乎與您的數據結構有關,或者您用於獲取JSON的API(如果有)非常嚴格。 – 2013-03-06 16:43:06

回答

1

這取決於你的意思是「來自於索引的負載對象」是什麼,如果你想

閱讀一切,但僅結合子列表 在這種情況下的解決方法是讀完整流並只綁定這些索引中的值。 您可以使用jacksons streaming API並自己做。解析流使用計數器來跟蹤實際索引,然後只綁定到POJO所需的東西。 但是,如果您的文件很大並且實時完成,這不是一個好的解決方案。

這些索引

你應該做的之間只讀取數據,如果你的文件大和性能問題。通過將你的json數組分割成多個與你的範圍匹配的文件來完成分頁,然後將特定的文件內容反序列化到你的數組中。

希望這會有所幫助...

+0

感謝您的回答...我想與您分享解決方案 - 我在我的android應用程序中完成了一個橋接php頁面,該頁面由參數(page numver)調用。這個PHP我做了所有需要的文件管理器操作,從確切的頁面生成有限的json文件 – 2013-03-09 19:07:18