我手头有一个问题,我试图解析以 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 类。我对存储响应数组及其各自计数的格式也有点困惑。响应代码类型的总数也因操作而异。
根据我的研究,我似乎需要使用 Streaming 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?