0

解析したいコンテンツのチャットがあります。.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で新しいレコードを解析する方法に関するベストプラクティスはありますか? 実際、更新されていることを制御する方法はわかりませんが、毎秒読み込んで結果を出力すると、データの重複が発生すると思います。

4

2 に答える 2

1

このデータを何らかの方法でスライスする必要があります...ファイルが大きくなったときにGSONの解析が遅くならないようにするには、ファイルを前処理して、使い捨てデータをスライスする必要があると思います。私は次のようなことをします:

  • 最初の実行:ファイルを完全に解析し、最初のIDを保存します。これは、最新のデータであるためです。
  • 2回目の実行(およびその他):ファイルを読み取り、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 );
于 2013-02-15T14:06:21.467 に答える
0

すべてのメッセージに一意の「日付」があるため、作成してMap<Date, Message>、存在しないすべての要素で更新するだけです。または、Map<String, Message>時間の並べ替えが必要ない場合は、日付文字列で使用できます

于 2013-02-15T14:09:08.300 に答える