FastJson,Jackson处理Json转换对象,复杂对象问题开发过程中最常见的问题就是Json格式转换问题。包括Json转object、data、map等。FastJson,一个处理json的通用类库,Jackson本人为他们做了一些总结,如有不足请留言。希望能对大家有所帮助。FastJson准备了两个套娃类@Data@AllArgsConstructor@NoArgsConstructorpublicclassFastJsonPerson{privateStringname;私有整数agexx;私有字符串其他;privateList卡;}@Data@NoArgsConstructor@AllArgsConstructorpublicclassCard{privateStringcardName;私人日期卡时间;}1。对象到字符串@TestpublicvoidtransformString(){FastJsonPerson;person=newFastJsonPerson();person.setName("士兵指挥官");person.setAgexx(18);person.setOther("其他人被屏蔽了");person.setCards(Arrays.asList(newCard("招商局",newDate()),newCard("上海发展",newDate())));字符串personString=JSON.toJSONString(person);System.out.println(personString);}//结果:{"agexx":18,"cards":[{"cardName":"Investment","cardTime":1631188795258},{"cardName":"Pufa","cardTime":1631188795258}],"name":"SoldierCommander","other":"Otherstobeblocked"}如果在转换过程中不需要某个字段,可以加上@JSONField(serialize=false),注意不是@jsonIgnore,那是杰克逊。在转换的过程中,我还想把字段别名@JSONField(name="xxx")改成日期格式@JSONField(format="yyyy-MM-ddHH:mm:ss")然后改对应的实体类完成以上三个请求。@Data@AllArgsConstructor@NoArgsConstructorpublicclassFastJsonPerson{私有字符串名称;@JSONField(name="age")privateIntegeragexx;@JSONField(serialize=false)privateStringother;privateListcards;}@Data@NoArgsConstructor@AllArgsConstructorpublicclassCard{privateStringcardName;}@JSONField(format="yyyy-MM-ddHH:mm:ss")privateDatecardTime;}再次执行上面的测试方法,会发现结果变成;agexx--->age,时间格式变成正常,其他字段被忽略。{"age":18,"cards":[{"cardName":"招商局","cardTime":"2021-09-0920:12:26"},{"cardName":"上海浦东发展","cardTime":"2021-09-0920:12:26"}],"name":"士兵指挥官"}2.字符串转对象,集合对象;@TestpublicvoidstringToObject(){//对于简单的String,我们可以将其转化为Array,然后通过名称获取内容。Strings="{\"age\":18,\"cards\":[{\"cardName\":\"Investment\",\"cardTime\":\"2021-09-0920:12:26\"},{\"cardName\":\"Pufa\",\"cardTime\":\"2021-09-0920:12:26\"}],\"name\":\"Bing长的\”}”;JSONObject对象=JSON.parseObject(s);System.out.println(object.get("年龄"));System.out.println(object.get("姓名"));系统。out.println(object.get("卡片"));Stringlist="[{\"age\":18,\"cards\":[{\"cardName\":\"Investment\",\"cardTime\":\"2021-09-0920:12:26\"},{\"cardName\":\"Pufa\",\"cardTime\":\"2021-09-0920:12:26\"}],\"name\":\"士兵指挥官\"},{\"age\":18,\"cards\":[{\"cardName\":\"Investment\",\"cardTime\":\"2021-09-0920:12:26\"},{\"cardName\":\"Pufa\",\"cardTime\":\"2021-09-0920:12:26\"}],\"name\":\“士兵\”}]”;ListpersonList=JSON.parseArray(list,FastJsonPerson.class);System.out.println(personList);}3.StringtoMap@TestpublicvoidstringToMap(){Strings="{\"age\":18,\"cards\":[{\"cardName\":\"Investment\",\"cardTime\":\"2021-09-0920:12:26\"},{\"cardName\":\"上海开发区\",\"cardTime\":\"2021-09-0920:12:26\"}],\"name\":\"SoldierCommander\"}";Mapmap=(Map)JSON.parseObject(s);System.out.println(map);}Jackson准备两个套娃类@Data@NoArgsConstructor@AllArgsConstructorpublicclassJacksonCard{privateStringcardName;privateDatecardTime;}@Data@NoArgsConstructor@AllArgsConstructorpublicclassJacksonPerson{privateStringname;privateIntegeragexx;privateprivateStringateotherList;卡片;}1.对象到字符串@SneakyThrows@TestpublicvoidtransformToString(){JacksonPersonperson=newJacksonPerson();person.setName("SoldierCommander");person.setAgexx(18);person.setOther("其他要屏蔽");person.setCards(Arrays.asList(newJacksonCard("招商局",newDate()),newJacksonCard("上海发展",newDate())));ObjectMapperobjectMapper=newObjectMapper();System.out.println(objectMapper.writeValueAsString(person));}//Result:{"name":"SoldierCommander","agexx":18,"other":"其他要屏蔽","cards":[{"cardName":"Investment","cardTime":1631242139184},{"cardName":"上海浦东发展","cardTime":1631242139184}]}如果在转换过程中不需要某个字段,可以添加@JsonIgnore,想要转换过程中改变字段别名@JsonProperty("age")Formatdate@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",timezone="GMT+8")根据对应的实体类进行转换对上面的描述@Data@NoArgsConstructor@AllArgsConstructorpublicclassJacksonPerson{privateStringname;@JsonProperty("age")私有整数agexx;@JsonIgnore私有字符串其他;私有列表卡;}@Data@NoArgsConstructor@AllArgsConstructorpublicclassJacksonCard{privateStringcardName;"yyyy-MM-ddHH:mm:ss",timezone="GMT+8")privateDatecardTime;}2.字符串转对象,对象集合,复杂对象@TestpublicvoidtransformToObject()throwsIOException{Strings="{\"age\":18,\"cards\":[{\"cardName\":\"Investment\",\"cardTime\":\"2021-09-0920:12:26\"},{\"cardName\":\"上海开发区\",\"cardTime\":\"2021-09-0920:12:26\"}],\"name\":\"SoldierCommander\"}";Stringlist="[{\"age\":18,\"cards\":[{\"cardName\":\"Investment\",\"cardTime\":\"2021-09-0920:12:26\"},{\"cardName\":\"Pufa\",\"cardTime\":\"2021-09-0920:12:26\"}],\"name\":\"SoldierCommander\"},{\"age\":18,\"cards\":[{\"cardName\":\"Investment\",\"cardTime\":\"2021-09-0920:12:26\"},{\"cardName\":\"上海开发区\",\"cardTime\":\"2021-09-0920:12:26\"}],\"name\":\"Soldier\"}]";ObjectMapperobjectMapper=newObjectMapper();System.out.println(objectMapper.readValue(s,JacksonPerson.class));ListpersonList=(List)objectMapper.readValue(list,objectMapper.getTypeFactory().constructParametricType(List.class,JacksonPerson.class));System.out.println(personList);//如果多-层Matryoshka,你可以使用TypeReference,你想要的一切都是List