Google cloud dataflow 在数据流管道中解析Stackdriver LogEntry JSON

Google cloud dataflow 在数据流管道中解析Stackdriver LogEntry JSON,google-cloud-dataflow,google-cloud-logging,google-cloud-stackdriver,Google Cloud Dataflow,Google Cloud Logging,Google Cloud Stackdriver,我正在构建一个数据流管道来处理Stackdriver日志,数据从Pub/Sub读取,结果写入BigQuery。 当我阅读Pub/Sub时,我得到了对象的JSON字符串,但我真正感兴趣的是protoPayload.line包含用户日志消息的记录。为了得到这些,我需要解析LogEntryJSON对象,我找到了一个两年前的方法: import com.google.api.client.json.JsonParser; 导入com.google.api.client.json.jackson2.Jac

我正在构建一个数据流管道来处理Stackdriver日志,数据从Pub/Sub读取,结果写入BigQuery。 当我阅读Pub/Sub时,我得到了对象的JSON字符串,但我真正感兴趣的是
protoPayload.line
包含用户日志消息的记录。为了得到这些,我需要解析
LogEntry
JSON对象,我找到了一个两年前的方法:

import com.google.api.client.json.JsonParser;
导入com.google.api.client.json.jackson2.JacksonFactory;
导入com.google.api.services.logging.model.LogEntry;
试一试{
JsonParser parser=new JacksonFactory().createJsonParser(条目);
LogEntry=parser.parse(LogEntry.class);
logString=logEntry.getTextPayload();
}
捕获(IOE异常){
错误(“IOException解析条目:+e.getMessage());
}
捕获(NullPointerException e){
错误(“NullPointerException解析条目:”+e.getMessage());
}
不幸的是,这对我不起作用,
logEntry.getTextPayload()
返回
null
。我甚至不确定它是否应该作为
com.google.api.services.logging
library工作。在谷歌云文档中没有提到,当前的日志库似乎是


因此,如果有人能建议解析
LogEntry
对象的正确或最简单的方法是什么?

我最终使用gson库手动解析
LogEntry
JSON,特别是使用树遍历方法。 以下是一个小片段:

静态类ProcessLogMessages扩展DoFn{
@过程元素
公共void processElement(ProcessContext c){
字符串项=c.element();
JsonParser=新的JsonParser();
JsonElement元素=parser.parse(条目);
if(element.isJsonNull()){
返回;
}
JsonObject root=element.getAsJsonObject();
JsonArray lines=root.get(“protoPayload”).getAsJsonObject().get(“line”).getAsJsonArray();
对于(int i=0;i
这很简单,对我来说也很好,因为我只对
protoPayload.line.logMessage
对象感兴趣。但是如果需要处理许多属性,我想这不是解析
LogEntry
对象的理想方法