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