2013-02-15 162 views
0

有一個聊天內容我想分析。我得到了網址來獲取它的.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

回答

1

您將需要以某種方式切分這些數據...爲了在您的文件增長時不讓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

0

你有uniq的「日期」爲每封郵件,所以你可以創建Map<Date, Message> ,用所有不存在的元素更新它。或者,如果您不需要時間排序,則可以使用帶日期字符串的Map<String, Message>