
在一个 Java 编写的 Flink 任务中,我需要将形如
{ "type": "A", # 固定字段 "time": 86400, # 固定字段 "data": { # 这里的字段和各个字段对应的数据类型都不固定 "a": 1, "b": 2, "x": 3 } } 这样的 JSON 转化为形如
{ "work": "A", # 固定字段,对应上面的 type "duration": 86400, # 固定字段 "payload": { # 对应上一个 JSON 的 data 部分 "a_name": 1, # 字段名会被映射转换,部分字段会被丢掉 "x_name": 3, "what": "ever" # 会有新增字段 } } 的 JSON,请问:
谢谢。
1 israinbow 2021-08-26 19:30:37 +08:00 一个纯办法, 分隔符拿出来循环匹配, json 映射成 map, 尽量减少 pojo, 尤其是字段不固定的时候. |
2 chendy 2021-08-26 20:50:48 +08:00 看你是否需要实体类 如果不需要的话用 JsonNode 之类的 api 做转换 |
3 C02TobNClov1Dz56 2021-08-26 21:00:56 +08:00 payload 定义成 map 就行了. |
4 opendragonhuang 2021-08-27 09:05:22 +08:00 可以看看 jackson 的 @JsonAnyGetter 和 @JsonAnySetter 注解 |
5 cheng6563 2021-08-27 09:26:36 +08:00 直接放一个 fastjson 的 JSONObject |
6 evi1j 2021-08-27 09:58:14 08:00 是否只有 payload 部分是变化的,并且你的 pojo 都是需要在其他地方使用的。我们对这种情况的做法是先定义一个外部 pojo,payload 部分单独定义,通过泛型使用。这样: class WrapData<T> { private String work; private Long duration; private T payload; } |
7 rb6221 2021-08-28 15:31:20 +08:00 经典 php 写法。这种东西传给前端估计要被打 |
8 nanmu42 OP 感谢各位,综合各位意见,我使用了 POJO 里嵌入 fastjson 的 JSONObject,目前体验尚佳。 |