我当前的 Android 应用程序正在使用 RealmIO 来存储 Json 数据。
我使用以下领域插入
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() 吗?
最佳答案
没有标准方法可以避免解析整个 JSON。另一方面,您可以避免将其全部存储在 RAM 中并将其提取到节点中。使用流式 JSON 解析器 ( these exist ) 并观察所需元素的事件。您收到的最后一个此类事件将包含最后一个 ID。
另一方面,如果您知道 JSON 的模式和序列化格式不会改变(例如,您可以控制它),则只需从以下位置扫描未解析的 JSON 文本:结束并通过计算括号和引号来提取该值。当然,这是一种脆弱的方法,尽管速度非常快。它的脆弱性肯定取决于模式:如果您要查找的列表是另一个列表的最后一个元素,那么它比它是特定键下的值要健壮得多,并且可以最终出现在 map 中的任何位置。
如果您控制着应用程序的 REST API 端,请考虑重新考虑,例如从最新到最早传递事件,因此您可以在解析时查找第一个事件,如果不需要过去的事件,则可以安全地丢弃其余事件。
关于java - 如何提取 Json 数组中的最后一项而不解析整个 Json 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48427864/