V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cpdyj0
V2EX  ›  问与答

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

  •  
  •   cpdyj0 · 2019-03-02 12:28:50 +08:00 · 1541 次点击
    这是一个创建于 1883 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    我的 Java 水平,菜菜菜
    Cbdy
        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));
    GTim
        6
    GTim  
       2019-03-02 16:10:37 +08:00   ❤️ 1
    @Cbdy 谢谢
    hpeng
        7
    hpeng  
       2019-03-02 17:51:00 +08:00   ❤️ 1
    你先把 server 的 bean 定义出来, 然后写反序列化器(JsonDeserializer), 然后反序列化器里面可以用 JsonParser 去遍历 server, 然后自己映射 bean 里面的字段.
    cpdyj0
        8
    cpdyj0  
    OP
       2019-03-02 19:26:22 +08:00
    感谢各位,,,大概是我对 Jackson 还不够熟悉
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1559 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 16:47 · PVG 00:47 · LAX 09:47 · JFK 12:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.