如何在不解析整个Json消息的情况下提取Json数组中的最后一项

时间:2018-01-24 16:59:35

标签: java json

我目前的Android应用程序正在使用RealmIO来存储Json数据。

我使用以下Realm插入

backgroundRealm.createOrUpdateAllFromJson(Data.class, rawJson);

我的原始Json数据是通过REST API检索的

API支持分页但是我需要传递后一个调用上一个rawJson中包含的最后一个Id。

这些Json数组有25000个项目。我不想要解析整个25000项目数组的成本。

我是否可以使用任何方法提取最后一个数组项以发现最后一个Id值是什么?

每个项目都类似于

{"id":6,"risk":"xxxxxxxxx","active":0,"from":"2016-07-18"}

我有哪些选择?

它只是rawJson.lastIndexOf(“id”)和substring()?

1 个答案:

答案 0 :(得分:1)

没有标准方法可以避免解析整个JSON。另一方面,您可以避免将所有存储在RAM中,并将其提取到节点中。使用流式JSON解析器(these exist)并观察所需元素的事件。您收到的此类最后一个事件将包含最后一个ID。

另一方面,如果你知道架构 JSON的序列化格式不会改变(例如你控制它),你可以只扫描未解析的JSON的文本结束并通过计算parens和引号来提取该值。当然,这是一种脆弱的方法,但速度非常快。它的脆弱性肯定取决于架构:如果您要查找的列表是另一个列表的最后一个元素,它比在特定键下的值更强大,并且可以结束在地图的任何地方。

如果您控制应用的REST API端,请考虑重新考虑它,例如将事件从最新传递到最早,因此您可以在解析时查找第一个事件,如果您不需要过去,则可以安全地丢弃其余事件。