java - 如何从动态更新的json中获取最新数据?

标签 java json

有一个聊天内容我想要解析。我得到了获取它的 .json 的 url。所以它看起来像:

{"messages":[
{"id":"111111","uid":"22222","name":"User","message":"Message","date":"2013-02-15 17:21:54","chatId":"111"},
{"id":"111111","uid":"22222","name":"User","message":"Message","date":"2013-02-15 17:21:54","chatId":"111"},
{"id":"111111","uid":"22222","name":"User","message":"Message","date":"2013-02-15 17:21:54","chatId":"111"}
]}

但是这个json有一些限制,我认为大约有20-30条记录。新记录添加在开头。它看起来像:

{"messages":[
{"id":"222222","uid":"33333","name":"User","message":"Message","date":"2013-02-15 18:21:59","chatId":"111"},
{"id":"111111","uid":"22222","name":"User","message":"Message","date":"2013-02-15 17:21:54","chatId":"111"},
{"id":"111111","uid":"22222","name":"User","message":"Message","date":"2013-02-15 17:21:55","chatId":"111"}
]}
.......
{"messages":[
{"id":"333333","uid":"44444","name":"User","message":"Message","date":"2013-02-15 19:13:34","chatId":"111"},
{"id":"222222","uid":"33333","name":"User","message":"Message","date":"2013-02-15 18:21:59","chatId":"111"},
{"id":"111111","uid":"22222","name":"User","message":"Message","date":"2013-02-15 17:21:54","chatId":"111"}
]}

我将通过 GSON 或 JSON Java 读取此 json 并将其放置到任何输出,这并不重要:)

但是有没有关于如何解析动态更新的 json 中的新记录的最佳实践?事实上我不知道如何控制它的更新,但我认为每秒读取它并将结果输出将导致数据重复。

最佳答案

您需要以某种方式对这些数据进行切片...为了在文件增长时不使 GSON 解析变慢,我认为您需要预处理您的文件,对一次性数据进行切片。我会做类似的事情:

  • 第一次执行:完全解析文件并存储第一个id,因为它是最新的数据;
  • 第二次执行(及其他):读取文件并将其存储在 StringBuilder 中。使用获得的字符串,对一次性数据进行切片,因为您之前已经存储了 id。该 ID 将向您显示需要从哪里开始切片。使用新数据,解析 GSON 并再次存储第一个 id。

您可以使用它创建代码来执行切片并适应我下面所说的想法:

String data = "{\"messages\":[" +
        "{\"id\":\"333333\",\"uid\":\"44444\",\"name\":\"User\",\"message\":\"Message\",\"date\":\"2013-02-15 19:13:34\",\"chatId\":\"111\"}," +
        "{\"id\":\"222222\",\"uid\":\"33333\",\"name\":\"User\",\"message\":\"Message\",\"date\":\"2013-02-15 18:21:59\",\"chatId\":\"111\"}," +
        "{\"id\":\"111111\",\"uid\":\"22222\",\"name\":\"User\",\"message\":\"Message\",\"date\":\"2013-02-15 17:21:54\",\"chatId\":\"111\"}" +
        "]}";

String lastId = "111111";
int sliceUntil = data.indexOf( "{\"id\":\"" + lastId + "\"" );

// since your disposable data is in the "tail" you your file,
// you just need to get the valid data (the data until the "last id") 
// and add the chars "]" and "}" to close your JSON
String newData = data.substring( 0, sliceUntil ) + "]}";

System.out.println( newData );

关于java - 如何从动态更新的json中获取最新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14896102/

相关文章:

java - 使用 Java 8 流 API 创建字符串映射和排序列表

java - 按钮中的图像模糊,按钮忽略 setSize

java - struts 2 教程中的第一个示例

javascript - 使用一个 php 函数返回多个 json 对象

javascript - 我可以一次性将其转换为长度吗?

javafx 时间线中的 java.util.ConcurrentModificationException

c# - 反序列化具有 int 作为 C# 中的键的 JSON

php - 为什么 json_encode 添加反斜杠?

Python AST 到字典结构

java - Android:在 Switch 语句中嵌套 for 循环以获取 ArrayList 的总和