JSON形式で保存された大きなログファイルを解析し、データを表にして別のJSONファイルとして出力しようとしているという問題があります。以下は、解析しているログ ファイルの形式です。
{
"timestamp": "2012-10-01TO1:00:00.000",
"id": "someone@somewhere.net",
"action": "Some_Action"
"responsecode": "1000"
}
ここでのアクションは、一部のユーザーが実行するアクションであり、応答コードはそのアクションの結果です。
タイムスタンプと ID は実際には集計には関係なく、アクション/コード フィールドのみに関心があります。任意のログ ファイルにこれらのエントリが何万もある可能性があります。私がやりたいことは、アクションのすべてのタイプ、応答コード、およびそれぞれの発生回数を追跡することです。
以下は、生成しようとしている出力のサンプルです。
{"actionName": "Some_User_Action",
"responses": [{"code": "1000", "count": "36"},
{"code": "1001", "count": "6"},
{"code": "1002", "count": "3"},
{"code": "1003", "count": "36"},
{"code": "1004", "count": "2"}],
"totalActionCount": "83"}
したがって、基本的には、アクションごとに、それが生成するすべての異なる応答と、それぞれの発生回数を追跡したいと考えています。最後に、そのアクションに対する応答の合計数を追跡したいと思います。
現在、出力データを格納する予定の出力オブジェクト用の Java クラスを作成しました。また、応答の配列とそれぞれのカウント数を格納する必要がある形式についても少し混乱しています。応答コードの種類の総数は、Action によっても異なります。
私の調査によると、ストリーミング API を使用して JSON 解析を利用する必要があるようです。ストリーミング API を使用する主な理由は、非ストリーミング API を使用すると必要になるメモリ オーバーヘッドの量です。これは、これらのログ ファイルのサイズでは不可能である可能性があります。現在、Jackson または GSON の使用を検討していますが、具体的な例やチュートリアルを見つけることができません。この問題を解決する方法について、私が研究したり、ヒントを得ることができる良い例を知っている人はいますか? ありがとうございます!
編集:私のクラス定義。
public class Action {
public static class Response {
private int _resultCode;
private int _count = 0;
public Response() {}
public int getResultCode() { return _resultCode; }
public int getCount() { return _count; }
public void setResultCode(int rc) { _resultCode = rc; }
public void setCount(int c) { _count = c; }
}
private List<Response> responses = new ArrayList<Response>();
private String _name;
// I've left out the getters/setters and helper functions that I will add in after.
}
Jackson を使用していて、最終的にこのオブジェクトを簡単に JSON にシリアライズできるようにしたい場合、このクラスの定義方法に関する提案はありますか? 現時点では、次を使用して main() メソッドでこの Action タイプの別の ArrayList を作成しています: List actions = new ArrayList(); HashMaps または他の代替手段を使用する方が良い選択肢ですか? また、後でJacksonを使用して簡単にJSONにシリアル化できますか?