想问下有哪些讲解 FastXML/Jackson 的资料

2019-03-02 12:28:50 +08:00
 cpdyj0

文档看了,注解文档也看了,但是还是不知道怎么优雅的 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 然后再去自行处理吗?

1669 次点击
所在节点    问与答
8 条回复
6IbA2bj5ip3tK49j
2019-03-02 12:47:46 +08:00
把 server 映射成 JsonNode 得了。
GTim
2019-03-02 15:04:07 +08:00
没理解你的意图,自己用 TypeReference 实现了一遍 https://www.twle.cn/t/547#reply0
Cbdy
2019-03-02 15:06:23 +08:00
我一般用这个,Jackson 简单封装下,只有三个类
https://github.com/cbdyzj/jojo
GTim
2019-03-02 15:20:27 +08:00
@Cbdy 看了你写的封装和测试用例,很赞,不过我不知道你这个要怎么处理 lz 说的,能给一个示例么?

我的 Java 水平,菜菜菜
Cbdy
2019-03-02 16:01:02 +08:00
@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));
GTim
2019-03-02 16:10:37 +08:00
@Cbdy 谢谢
hpeng
2019-03-02 17:51:00 +08:00
你先把 server 的 bean 定义出来, 然后写反序列化器(JsonDeserializer), 然后反序列化器里面可以用 JsonParser 去遍历 server, 然后自己映射 bean 里面的字段.
cpdyj0
2019-03-02 19:26:22 +08:00
感谢各位,,,大概是我对 Jackson 还不够熟悉

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/540283

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX