基本用法

https://juejin.cn/post/6844903766915809287#heading-45

映射嵌套的JSON对象

反序列化数组或集合

json 字符串反序列化为 Java 数组

String json = "[\"C\",\"C++\",\"Java\",\"Python\",\"Golang\",\"JavaScript\"]";
String[] array = mapper.readValue(json, String[].class);

json 字符次数组反序列为数组对象

ArrayList<User> users = Lists.newArrayList(User.builder().username("张三").build(), User.builder().username("李四").build());
String jsonArray = objectMapper.writeValueAsString(users);
User[] userArray = objectMapper.readValue(jsonArray, User[].class);

json 数组反序列化为集合

  • 第一种时 Jackson 库提供的 TypeReference

ArrayList<User> users = Lists.newArrayList(User.builder().username("张三").build(), User.builder().username("李四").build());
String jsonArray = objectMapper.writeValueAsString(users);
ArrayList<User> list = objectMapper.readValue(jsonArray, new TypeReference<>() {
});
  • 另外一种是使用重载的 readValue 方法来接受 JavaType:

CollectionType javaType = objectMapper.getTypeFactory().constructCollectionType(List.class, User.class);
List<User> users3 = objectMapper.readValue(jsonArray, javaType);

最后一点需要注意的是,User 类需要有一个无参数的默认构造函数,如果没有,则 Jackson 将无法实例化它

基本用法

Java 类转 json 字符串

User user = new User();
objectMapper.writeValueAsString(user);

或者序列化到文件

objectMapper.writeValue(new File("user.json"), user);

json 字符串转 Java 类

String json = "{\"name\":\"mkyong\",\"age\":37}";

// 从字符串反序列化
User user = objectMapper.readValue(json, User.class);

// 或者从文件反序列化
User user = objectMapper.readValue(new File("user.json"), User.class);

// 或者从 URL 反序列化
User user = objectMapper.readValue(new URL("http://mkyong.com/api/user.json"), User.class);

json 转换为 JsonNode

String json = "{\"name\":\"mkyong\",\"age\":37}";
JsonNode jsonNode = objectMapper.readTree(json);

// 从文件反序列化
JsonNode jsonNode = objectMapper.readTree(new File("user.json"));

// 从 URL 反序列化
JsonNode jsonNode = objectMapper.readTree(new URL("http://mkyong.com/api/user.json"));

json 转换为 Map

String json = "{\"name\":\"mkyong\",\"age\":37}";
Map<String, Object> map = objectMapper.readValue(json, new TypeReference<Map<String, Object>>(){});

// 从文件反序列化
Map<String, Object> map = objectMapper.readValue(new File("user.json"), new TypeReference<Map<String, Object>>(){});

// 从 URL 反序列化
Map<String, Object> map = objectMapper.readValue(new URL("http://mkyong.com/api/user.json"), new TypeReference<Map<String, Object>>(){});

json 转换为 List

String json = "[{\"name\":\"mkyong\",\"age\":37},{\"name\":\"laplap\",\"age\":38}]";

List<Map<String, Object>> list = objectMapper.readValue(json, new TypeReference<List<Map<String, Object>>>(){});

// 从文件反序列化
List<Map<String, Object>> list = objectMapper.readValue(new File("user.json"), new TypeReference<List<Map<String, Object>>>(){});

// 从 URL 反序列化
List<Map<String, Object>> list = objectMapper.readValue(new URL("http://mkyong.com/api/user.json"), new TypeReference<List<Map<String, Object>>>(){});

json 转换为 Java 类数组

String json = "[{\"name\":\"mkyong\",\"age\":37},{\"name\":\"laplap\",\"age\":38}]";

User[] users = objectMapper.readValue(json, User[].class);

// 从文件反序列化
User[] users = objectMapper.readValue(new File("user.json"), User[].class);

// 从 URL 反序列化
User[] users = objectMapper.readValue(new URL("http://mkyong.com/api/user.json"), User[].class);

最后更新于

这有帮助吗?