繁体   English   中英

如何将 JSON Array 反序列化为 Apache beam PCollection<javaobject></javaobject>

[英]How to deserialize JSON Array to Apache beam PCollection<javaObject>

我有这样的数据

[{"ProjectId":1476401625,"ProjectName":"This is project name","ProjectPostcode":4178},{"ProjectId":2343,"ProjectName":"This is project 2 name","ProjectPostcode":5323}]

我需要将其反序列化为 Java object 并使用以下代码:

PCollection<Project> deserialisedProjectObject = projectFile.apply("Deserialize Projects", ParseJsons.of(Project.class))
        .setCoder(SerializableCoder.of(Project.class));

但我总是出错

Exception in thread "main" org.apache.beam.sdk.Pipeline$PipelineExecutionException: java.lang.RuntimeException: Failed to parse a com.lendlease.dp.entity.Project from JSON value: [{"ProjectId":1476401625,"ProjectName":"This is project name","ProjectPostcode":4178},{"ProjectId":2343,"ProjectName":"This is project 2 name","ProjectPostcode":5323}]

如果我将代码更改为:

PCollection<Project[]> deserialisedProjectObject = projectFile.apply("Deserialize Projects", ParseJsons.of(Project[].class))
        .setCoder(SerializableCoder.of(Project[].class));

跑步者能够反序列化它,但我需要这一行来返回项目的集合; 不是项目数组的集合

您从 Project[] object 开始,因此解析是正确的。 要从 object 中提取项目对象,只需在 ParseJson 之后应用 FlatMap 转换,输出数组中的元素。

除了 ParseJson,您可能还想看看:

JsonToRow

output 是行 object,您可以将其用作提供许多不错功能的模式,请参阅使用模式 如果您需要管道中的实际 POJO 以及行 object,您可以使用Convert.fromRow将其转换为 Pojo object。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM