java - Jackson库的ANDROID使用: How to load object with indexes - range from to

标签 java android json performance jackson

我有非常大的 JSON 文件用于解析和管理。我的 JSON 文件包含这样的结构

[
{"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>>() { }); 

仅包含索引为 FROM -TO(例如从 30 到 40)的对象,而不加载整个 JSON 文件中的所有对象?

问候

最佳答案

如果您愿意,这取决于您所说的“加载带有索引的对象”的含义

读取所有内容,但仅绑定(bind)子列表 这种情况下的解决方案是读取完整流并仅绑定(bind)这些索引内的值。 您可以使用 jacksons Streaming api 并自行完成。使用计数器来解析流来跟踪实际索引,然后仅将您需要的内容绑定(bind)到 POJO。 然而,如果您的文件很大并且是实时完成的,这不是一个好的解决方案。

仅读取这些索引之间的数据

如果您的文件很大并且性能很重要,您应该这样做。不要使用单个大文件,而是通过将 json 数组拆分为与您的范围匹配的多个文件来进行分页,然后将特定文件内容反序列化到数组中。

希望这有帮助...

关于java - Jackson库的ANDROID使用: How to load object with indexes - range from to,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15252933/

相关文章:

java - Amazon CloudSearch结构化查询解析器

android - 重复条目 : android/support/design/widget/CoordinatorLayout

javascript - 需要一些关于 PHP Session 多维数组到 Javascript 的建议

java - 诸如对象更改监听器之类的东西?

java - Strust 2.15 如何覆盖 TextProviderSupport 以自定义资源包消息

java - 单一方法类与接口(interface)实现

java - Android Twilio "make an HTTP POST to your Messages list resource URI"是什么意思?

Android:Logcat 在 Intellij IDEA 中不显示任何内容

java - 在任何 View 上 setText()

ios:Socket.io 中的 Json