有一个聊天内容我想要解析。我得到了获取它的 .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/