文档看了,注解文档也看了,但是还是不知道怎么优雅的 map 下面这种 json
{
"hosts": {
"baidu.com": "127.0.0.1"
},
"servers": [
{
"address": "1.2.3.4",
"port": 5353,
"domains": [
"domain:example.com"
]
},
"8.8.8.8",
"8.8.4.4",
"localhost"
],
"clientIp": "1.2.3.4",
"tag": "dns_inbound"
}
主要是servers
这个,难道要全部 map 成 Object 然后再去自行处理吗?
1
6IbA2bj5ip3tK49j 2019-03-02 12:47:46 +08:00 via iPhone 1
把 server 映射成 JsonNode 得了。
|
2
GTim 2019-03-02 15:04:07 +08:00 1
没理解你的意图,自己用 TypeReference 实现了一遍 https://www.twle.cn/t/547#reply0
|
3
Cbdy 2019-03-02 15:06:23 +08:00 via Android 1
我一般用这个,Jackson 简单封装下,只有三个类
https://github.com/cbdyzj/jojo |
4
GTim 2019-03-02 15:20:27 +08:00 1
|
5
Cbdy 2019-03-02 16:01:02 +08:00 1
@GTim
var servers = new JsonObject(json).getJsonArray("servers"); assert "1.2.3.4".equals(servers.getJsonObject(0).getString("address")); assert Integer.valueOf(5353).equals(servers.getJsonObject(0).getInteger("port")); assert "domain:example.com".equals(servers.getJsonObject(0).getJsonArray("domains").getString(0)); assert "8.8.8.8".equals(servers.getString(1)); assert "8.8.4.4".equals(servers.getString(2)); assert "localhost".equals(servers.getString(3)); |
7
hpeng 2019-03-02 17:51:00 +08:00 1
你先把 server 的 bean 定义出来, 然后写反序列化器(JsonDeserializer), 然后反序列化器里面可以用 JsonParser 去遍历 server, 然后自己映射 bean 里面的字段.
|
8
cpdyj0 OP 感谢各位,,,大概是我对 Jackson 还不够熟悉
|