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

问题描述:

有一个聊天内容我想分析。我得到了网址来获取它的.json。所以它看起来像:如何从动态更新的json获取最新数据?

{"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?事实上,我不知道如何控制它被更新,但每秒钟读取它并将结果输出,将导致数据重复,我认为。

+0

难道您不能控制这些数据吗? – davidbuzatto 2013-02-15 13:53:04

+0

@davidbuzatto,不,我不知道。我有一个chat.json文件的链接,该文件在数据库中的数据更新后填充。所以我可以得到这个文件并反序列化。 – Dragon 2013-02-15 14:01:30

+0

@AaronKurtzhals,目前我有解析.json文件的Java bean。我正在考虑颠倒数据数组并通过消息ID +消息日期进行比较。并以这种方式打印新消息。但我不知道这是否是一个好做法。 – Dragon 2013-02-15 14:04:24

您将需要以某种方式切分这些数据...为了在您的文件增长时不让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); 
+0

这是我在Java中使用JSON的第一次体验。谢谢你的例子,我会尝试并反馈:) – Dragon 2013-02-15 14:18:20

+0

@Dragon:不用客气;) – davidbuzatto 2013-02-15 14:20:43

你有uniq的“日期”为每封邮件,所以你可以创建Map<Date, Message> ,用所有不存在的元素更新它。或者,如果您不需要时间排序,则可以使用带日期字符串的Map<String, Message>