我目前的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()?
答案 0 :(得分:1)
没有标准方法可以避免解析整个JSON。另一方面,您可以避免将所有存储在RAM中,并将其提取到节点中。使用流式JSON解析器(these exist)并观察所需元素的事件。您收到的此类最后一个事件将包含最后一个ID。
另一方面,如果你知道架构和 JSON的序列化格式不会改变(例如你控制它),你可以只扫描未解析的JSON的文本结束并通过计算parens和引号来提取该值。当然,这是一种脆弱的方法,但速度非常快。它的脆弱性肯定取决于架构:如果您要查找的列表是另一个列表的最后一个元素,它比在特定键下的值更强大,并且可以结束在地图的任何地方。
如果您控制应用的REST API端,请考虑重新考虑它,例如将事件从最新传递到最早,因此您可以在解析时查找第一个事件,如果您不需要过去,则可以安全地丢弃其余事件。