java - 如何提取 Json 数组中的最后一项而不解析整个 Json 消息

标签 java json

我当前的 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/

相关文章:

java - 我可以在@Value注释中传递变量来读取属性文件,其 key 存储在字符串变量中吗?

java - Java 中的 printStackTrace 与 Logger 框架

php - 在即时搜索脚本中使用 PHP 而不是 JSON 作为输出

javascript - 是否可以将 HTML id 设置为 json 对象并将其传递给另一个函数?

java - 一步使用多个分隔符拆分字符串

java - 如何在 Java AWT 中使用 Bigdecimal

java - 在 Mac OS X 上最小化后 JFrame 不刷新

java - 使用 POST 发送 JSON 对象时的 HTTP 415

java - Jersey 2 中的自定义 MOXyJsonProvider 不起作用?

mysql - Ionic Storage 可以再使用 SQL 了吗?