(方便自己用)
Jackson
Jackson将对象转为json字符串
ObjectMapper mapper = new ObjectMapper().findAndRegisterModules();
Book book = new Book();
book.setId(1);
book.setPublisher("北京");
book.setNownum(22);
book.setCreatetime(new Timestamp(System.currentTimeMillis()));
book.setAuthor("jack");
List<Book> list = new ArrayList<>();
list.add(book);
Map map = new ConcurrentHashMap();
map.put( "name", "json" );
map.put( "bool", Boolean.TRUE );
map.put( "int", new Integer(1) );
map.put( "arr", new String[]{"a","b"} );
map.put( "func", "func2" );
map.put( "book", book );
String json = mapper.writeValueAsString(list);
System.out.println(json);
// .findAndRegisterModules();当有时间时,需要加上这个
// 时间属性 需要加上注解 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
// 当需要属性被忽略时 需要注解 @JsonIgnore
Jackson将json字符串转为对象
String json = "{\"id\":1,\"author\":\"jack\",\"publisher\":\"北京\",\"nownum\":22,\"createtime\":\"2023-10-10 14:42:56\"}";
ObjectMapper mapper = new ObjectMapper().findAndRegisterModules();
Book book = mapper.readValue(json, Book.class);
// System.out.println(book);
String jsonMap = "{\"arr\":[\"a\",\"b\"],\"bool\":true,\"func\":\"func2\",\"book\":{\"id\":1,\"author\":\"jack\",\"publisher\":\"北京\",\"nownum\":22,\"createtime\":\"2023-10-10 14:47:56\"},\"name\":\"json\",\"int\":1}";
Map map = mapper.readValue(jsonMap, new TypeReference<Map<String,Object>>() {});
// System.out.println(map);
String jsonList = "[{\"id\":1,\"author\":\"jack\",\"publisher\":\"北京\",\"nownum\":22,\"createtime\":\"2023-10-10 15:00:21\"}]";
List<Book> list = mapper.readValue(jsonList, new TypeReference<List<Book>>() {
});
// System.out.println(list);
String jsonArray = "[{\"xxx\":\"yyy\",\"bookname\":\"三国\",\"author\":\"罗贯中\",\"date\":\"2023年10月09日 17时09分20秒\",\"localDateTime\":\"2023-10-09 17:09:20\"}]";
//忽略字段设置
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Book[] books = mapper.readValue(jsonArray, Book[].class);
for (Book book1 : books) {
System.out.println(book1);
}
// System.out.println(books);
// 当json字符串内有这个属性,实体类里没有这个属性需要使用这个,进行忽略
// mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
FastJson
FastJson将对象转为字符串
Book book = new Book();
book.setId(1);
book.setPublisher("北京");
book.setNownum(22);
book.setCreatetime(new Timestamp(System.currentTimeMillis()));
book.setAuthor("jack");
List<Book> list = new ArrayList<>();
list.add(book);
Map map = new ConcurrentHashMap();
map.put( "name", "json" );
map.put( "bool", Boolean.TRUE );
map.put( "int", new Integer(1) );
map.put( "arr", new String[]{"a","b"} );
map.put( "func", "func2" );
map.put( "book", book );
String jsonString = JSONObject.toJSONString(book);
System.out.println(jsonString);
// 时间属性需要 @JSONField(format = "yyyy-MM-dd HH:mm:ss")
// 当需要属性被忽略时
// deserialize = false 不开启反序列化(json反序列化)
// serialize = false 不开启序列化(json序列化)
// @JSONField(deserialize = false,serialize = false)
FastJson将json字符串转为对象
String json = "{\"id\":1,\"author\":\"jack\",\"publisher\":\"北京\",\"nownum\":22,\"createtime\":\"2023-10-10 14:42:56\"}";
Book book = JSONObject.parseObject(json, Book.class);
System.out.println(book);
String jsonArray = "[{\"xxx\":\"yyy\",\"bookname\":\"三国\",\"author\":\"罗贯中\",\"date\":\"2023年10月09日 17时09分20秒\",\"localDateTime\":\"2023-10-09 17:09:20\"}]";
Book[] books1 = JSONObject.parseObject(jsonArray, Book[].class);
for (Book book1 : books1) {
System.out.println(book1);
}
String jsonList = "[{\"id\":1,\"author\":\"jack\",\"publisher\":\"北京\",\"nownum\":22,\"createtime\":\"2023-10-10 15:00:21\"}]";
List<Book> list = JSONObject.parseObject(jsonList, new TypeReference<List<Book>>() {
});
System.out.println(list);
// TypeReference注意使用
/*@JSONField(format = "yyyy-MM-dd HH:mm:ss") 注解主要用于指定在将 Java 对象序列化为 JSON 时的日期格式,而不是在将 JSON 转换为 Java 对象时。这个注解在对象反序列化时通常不会生效,因为 JSON 字符串已经包含了日期信息,而不需要进一步的格式化。*/