繁体   English   中英

jackson将数组反序列化为java对象

[英]jackson deserialize array into a java object

我有第三方编码的json'ed host, port, uri元组数组作为固定长度数组的数组:

[
  ["www1.example.com", "443", "/api/v1"],
  ["proxy.example.com", "8089", "/api/v4"]
]

我想用杰克逊魔法获取一个实例列表

class Endpoint {
    String host;
    int port;
    String uri;
}

请帮我添加正确的注释,使ObjectMapper能够发挥魔力。

我没有对传入格式的控制,所有我的google'n都以如何将正确的json对象(不是数组)数组映射到对象列表(如https://stackoverflow.com/a/6349488/707608 )的答案结束)

= https://stackoverflow.com/users/59501/staxmanhttps://stackoverflow.com/a/38111311/707608中建议的工作解决方案

public static void main(String[] args) throws IOException {
    String input = "" +
            "[\n" +
            "  [\"www1.example.com\", \"443\", \"/api/v1\"],\n" +
            "  [\"proxy.example.com\", \"8089\", \"/api/v4\"]\n" +
            "]";

    ObjectMapper om = new ObjectMapper();
    List<Endpoint> endpoints = om.readValue(input, 
        new TypeReference<List<Endpoint>>() {});

    System.out.println("endpoints = " + endpoints);
}

@JsonFormat(shape = JsonFormat.Shape.ARRAY)
static class Endpoint {
    @JsonProperty() String host;
    @JsonProperty() int port;
    @JsonProperty() String uri;

    @Override
    public String toString() {
        return "Endpoint{host='" + host + '\'' + ", port='" + port + '\'' + ", uri='" + uri + '\'' + '}';
    }
}

添加以下注释:

@JsonFormat(shape=JsonFormat.Shape.ARRAY)
class Endpoint {
}

它应该按你的意愿序列化条目。

另外:最安全的是然后使用@JsonPropertyOrder({ .... } )来强制执行特定的排序,因为JVM可能会或可能不会以任何特定顺序公开字段或方法。

考虑导入二维数组,然后运行循环。 然后,您可以在Endpoint类上拥有一个构造函数,该构造函数接受内部数组的每个实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM