
在一个 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 Aug 26, 2021 一个纯办法, 分隔符拿出来循环匹配, json 映射成 map, 尽量减少 pojo, 尤其是字段不固定的时候. |
2 chendy Aug 26, 2021 1 看你是否需要实体类 如果不需要的话用 JsonNode 之类的 api 做转换 |
3 C02TobNClov1Dz56 Aug 26, 2021 payload 定义成 map 就行了. |
4 opendragonhuang Aug 27, 2021 可以看看 jackson 的 @JsonAnyGetter 和 @JsonAnySetter 注解 |
5 cheng6563 Aug 27, 2021 直接放一个 fastjson 的 JSONObject |
6 evi1j Aug 27, 2021 是否只有 payload 部分是变化的,并且你的 pojo 都是需要在其他地方使用的。我们对这种情况的做法是先定义一个外部 pojo,payload 部分单独定义,通过泛型使用。这样: class WrapData<T> { private String work; private Long duration; private T payload; } |
7 rb6221 Aug 28, 2021 经典 php 写法。这种东西传给前端估计要被打 |
8 nanmu42 OP 感谢各位,综合各位意见,我使用了 POJO 里嵌入 fastjson 的 JSONObject,目前体验尚佳。 |