注解
@JsonProperty
@JsonAlias
@JsonAlias 为反序列化期间接受的属性定义一个或多个备用名称,即将 JSON 数据设置为 Java 对象。但是在序列化时,即从 Java 对象获取 JSON 时,只使用实际的逻辑属性名而不是别名。
转换
Object —> Map
ObjectMapper oMapper = new ObjectMapper();Student obj = new Student("ZhangSan",18);Map<String, Object> map = oMapper.convertValue(obj, Map.class);
Map —> Object
String —> List / Array
ObjectMapper mapper = new ObjectMapper();String json = "[{\"name\":\"mkyong\", \"age\":37}, {\"name\":\"fong\", \"age\":38}]";// 1. convert JSON array to Array objectsPerson[] pp1 = mapper.readValue(json, Person[].class);// 2. convert JSON array to List of objectsList<Person> ppl2 = Arrays.asList(mapper.readValue(json, Person[].class));
Map<String, Object> convertJsonStringToMap(String json) throws IOException {ObjectMapper mapper = new ObjectMapper();TypeReference type = new TypeReference<Map<String, Object>>(){};return mapper.readValue(json, type);}
List <—> ArrayNode
List<MyClass> myObjects = Arrays.asList(mapper.readValue(json, MyClass[].class))ObjectMapper mapper = new ObjectMapper();List<Employee> e = new ArrayList<Employee>();ArrayNode array = mapper.valueToTree(e);array.forEach(node -> {try {erModelProps.add(objectMapper.treeToValue(node, Employee.class));} catch (JsonProcessingException e) {throw new JeecgBootException("转换失败");}});
异常处理
解析json字符串失败,原因:Java 8 date/time type java.time.LocalDate not supported by default: add Module “com.fasterxml.jackson.datatype:jackson-datatype-jsr310”
