注解

@JsonProperty

@JsonAlias

@JsonAlias 为反序列化期间接受的属性定义一个或多个备用名称,即将 JSON 数据设置为 Java 对象。但是在序列化时,即从 Java 对象获取 JSON 时,只使用实际的逻辑属性名而不是别名。

转换

Object —> Map

  1. ObjectMapper oMapper = new ObjectMapper();
  2. Student obj = new Student("ZhangSan",18);
  3. Map<String, Object> map = oMapper.convertValue(obj, Map.class);

Map —> Object

String —> List / Array

  1. ObjectMapper mapper = new ObjectMapper();
  2. String json = "[{\"name\":\"mkyong\", \"age\":37}, {\"name\":\"fong\", \"age\":38}]";
  3. // 1. convert JSON array to Array objects
  4. Person[] pp1 = mapper.readValue(json, Person[].class);
  5. // 2. convert JSON array to List of objects
  6. List<Person> ppl2 = Arrays.asList(mapper.readValue(json, Person[].class));
  1. Map<String, Object> convertJsonStringToMap(String json) throws IOException {
  2. ObjectMapper mapper = new ObjectMapper();
  3. TypeReference type = new TypeReference<Map<String, Object>>(){};
  4. return mapper.readValue(json, type);
  5. }

List <—> ArrayNode

  1. List<MyClass> myObjects = Arrays.asList(mapper.readValue(json, MyClass[].class))
  2. ObjectMapper mapper = new ObjectMapper();
  3. List<Employee> e = new ArrayList<Employee>();
  4. ArrayNode array = mapper.valueToTree(e);
  5. array.forEach(node -> {
  6. try {
  7. erModelProps.add(objectMapper.treeToValue(node, Employee.class));
  8. } catch (JsonProcessingException e) {
  9. throw new JeecgBootException("转换失败");
  10. }
  11. });

异常处理

解析json字符串失败,原因:Java 8 date/time type java.time.LocalDate not supported by default: add Module “com.fasterxml.jackson.datatype:jackson-datatype-jsr310”