基本用法
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);
最后更新于
这有帮助吗?