day_24:JSON和枚举
JSON
JavaScript Object Notation 表示对象的一种方式,基于JavaScript语言的轻量级的数据交换格式;用来传输数据的一种格式
1、JSON的数据表示
JSON采用名值对的方式来表示一个对象的信息,同时,支持无限层嵌套。
JSON对象:{name1:value1,name2:value2......}、JSON数组:[{},{},{}]
JSON就是一串字符串 只不过元素会使用特定的符号标注
2、JSON-lib
关键类:JSONObject、JSONArray
关键方法:fromObject(Object o,JsonConfig jsonConfig) 将 o 转换为JSON对象或者JSON数组
toBean(JsonObject o,Class c) 将JSON对象转换为指定类型的对象
toArray(JsonArray jsonArray,Class c) 将JSON数组转换为指定类型的对象数组
toCollection(JsonArray jsonArray,Class c) 将JSON数组转换为指定类型的对象集合
应用:
public class Book { private String name; private double price; private Author author; public Book() { } public Book(String name, double price) { this.name = name; this.price = price; } public Book(String name, double price, Author author) { super(); this.name = name; this.price = price; this.author = author; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public Author getAuthor() { return author; } public void setAuthor(Author author) { this.author = author; } @Override public String toString() { return "Book [name=" + name + ", price=" + price + ", author=" + author + "]"; } } public class Author { String name; String info; public Author() { } public Author(String name, String info) { this.name = name; this.info = info; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } @Override public String toString() { return "Author [name=" + name + ", info=" + info + "]"; } }
public class Test02 { public static void main(String[] args) { Book book1 = new Book("一个人的朝圣", 88, new Author("郑强", "天空没有翅膀的痕迹,而我已经飞过!")); Book book2 = new Book("我就是要和别人不一样", 99, new Author("赤名莉香", "就是因为不知道明天会发生什么,所以才需要更努力不是吗?")); // 数组转JSON Book[] books1 = new Book[] { book1, book2 }; JSONArray fromObject = JSONArray.fromObject(books1); System.out.println(fromObject); // [{"author":{"info":"天空没有翅膀的痕迹,而我已经飞过!","name":"郑强"},"name":"一个人的朝圣","price":88},{"author":{"info":"就是因为不知道明天会发生什么,所以才需要更努力不是吗?","name":"赤名莉香"},"name":"我就是要和别人不一样","price":99}] // 数组转JSON(过滤器) Book[] books2 = new Book[] { book1, book2 }; JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setExcludes(new String[] { "info" }); JSONArray fromObject2 = JSONArray.fromObject(books2, jsonConfig); System.out.println(fromObject2); // [{"author":{"name":"郑强"},"name":"一个人的朝圣","price":88},{"author":{"name":"赤名莉香"},"name":"我就是要和别人不一样","price":99}] // 集合转JOSN ArrayList<Book> books3 = new ArrayList<>(); books3.add(book1); books3.add(book2); JSONArray fromObject3 = JSONArray.fromObject(books3); System.out.println(fromObject3); // [{"author":{"info":"天空没有翅膀的痕迹,而我已经飞过!","name":"郑强"},"name":"一个人的朝圣","price":88},{"author":{"info":"就是因为不知道明天会发生什么,所以才需要更努力不是吗?","name":"赤名莉香"},"name":"我就是要和别人不一样","price":99}] // 集合转JSON(过滤器) ArrayList<Book> books4 = new ArrayList<>(); books4.add(book1); books4.add(book2); JsonConfig jsonConfig2 = new JsonConfig(); jsonConfig2.setExcludes(new String[] { "author", "price" }); JSONArray fromObject4 = JSONArray.fromObject(books4, jsonConfig2); System.out.println(fromObject4); // [{"name":"一个人的朝圣"},{"name":"我就是要和别人不一样"}] } }
public class Test03 { public static void main(String[] args) { // JSON字符串转对象 String json1 = "{'author':{'info':'就是因为不知道明天会发生什么,所以才需要更加努力不是吗?','name':'郑强'},'name':'东京爱情故事','price':33.8}"; JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setExcludes(new String[] { "info" }); JSONObject jsonObject = JSONObject.fromObject(json1, jsonConfig); Book book1 = (Book) JSONObject.toBean(jsonObject, Book.class); System.out.println(book1); // Book[name=东京爱情故事,price=33.8,author=Author[name=郑强,info=就是因为不知道明天会发生什么,所以才需要更加努力不是吗?]] // 添加过滤器后:Book[name=东京爱情故事,price=33.8,author=Author[name=郑强,info=null]] // JSON字符串转数组 String json2 = "[{'author':{'info':'天空没有翅膀的痕迹,而我已经飞过!','name':'郑强'},'name':'一个人的朝圣','price':88},{'author':{'info':'就是因为不知道明天会发生什么,所以才需要更努力不是吗?','name':'赤名莉香'},'name':'我就是要和别人不一样','price':99}]"; JsonConfig jsonConfig2 = new JsonConfig(); jsonConfig2.setExcludes(new String[] { "author", "price" }); JSONArray jsonArray = JSONArray.fromObject(json2, jsonConfig2); Book[] books = (Book[]) JSONArray.toArray(jsonArray, Book.class); for (Book book : books) { System.out.println(book); // Book [name=一个人的朝圣, price=88.0, author=Author [name=郑强, // info=天空没有翅膀的痕迹,而我已经飞过!]] // Book [name=我就是要和别人不一样, price=99.0, author=Author [name=赤名莉香, // info=就是因为不知道明天会发生什么,所以才需要更努力不是吗?]] // Book [name=一个人的朝圣, price=0.0, author=null] // Book [name=我就是要和别人不一样, price=0.0, author=null] } // JSON字符串转集合 String json3 = "[{'author':{'info':'天空没有翅膀的痕迹,而我已经飞过!','name':'郑强'},'name':'一个人的朝圣','price':88},{'author':{'info':'就是因为不知道明天会发生什么,所以才需要更努力不是吗?','name':'赤名莉香'},'name':'我就是要和别人不一样','price':99}]"; JsonConfig jsonConfig3 = new JsonConfig(); jsonConfig3.setExcludes(new String[] { "author", "price" }); JSONArray fromObject = JSONArray.fromObject(json3, jsonConfig3); ArrayList<Book> books1 = (ArrayList<Book>) JSONArray.toCollection(fromObject, Book.class); for (Book book : books1) { System.out.println(book); // Book [name=一个人的朝圣, price=88.0, author=Author [name=郑强, // info=天空没有翅膀的痕迹,而我已经飞过!]] // Book [name=我就是要和别人不一样, price=99.0, author=Author [name=赤名莉香, // info=就是因为不知道明天会发生什么,所以才需要更努力不是吗?]] // Book [name=一个人的朝圣, price=0.0, author=null] // Book [name=我就是要和别人不一样, price=0.0, author=null] } } }
JSON和XML的区别:

枚举
一个类只有一个实例,采用单例模式实现、一个类有几个固定的实例采用枚举来实现
枚举类的第一句必须是创建对象的语句
常用方法:valueOf(Class<T> enumType,String name) 将字符串转换为枚举类型的对象
public class Seasons { private static Seasons spring = new Seasons("春天", "春天来了"); private static Seasons summer = new Seasons("夏天", "夏天来了"); private static Seasons autumn = new Seasons("秋天", "秋天来了"); private static Seasons winter = new Seasons("冬天", "冬天来了"); private String name; private String info; private Seasons() { } private Seasons(String name, String info) { this.name = name; this.info = info; } public static Seasons getSpring() { return spring; } public static Seasons getSummer() { return summer; } public static Seasons getAutumn() { return autumn; } public static Seasons getWinter() { return winter; } @Override public String toString() { return "Seasons [name=" + name + ", info=" + info + "]"; } } public class Test01 { public static void main(String[] args) { Seasons spring = Seasons.getSpring(); Seasons summer = Seasons.getSummer(); Seasons autumn = Seasons.getAutumn(); Seasons winter = Seasons.getWinter(); System.out.println(spring); System.out.println(summer); System.out.println(autumn); System.out.println(winter); } }
public enum Animals { 狗("狗吃屎"), 猫("猫吃鱼"), 蛇("蛇吃鼠"), 鼠("鼠吃米"); private String info; private Animals(String info) { this.info = info; } @Override public String toString() { return info; } } public class Test01 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); while (true) { System.out.println("请输入你要查询的对象:"); String str = scan.next(); Animals valueOf = Enum.valueOf(Animals.class, str); switch (valueOf) { case 狗: System.out.println(valueOf); break; case 猫: System.out.println(valueOf); break; case 蛇: System.out.println(valueOf); break; case 鼠: System.out.println(valueOf); break; default: System.out.println("暂时没手机此种动物"); } } } }

浙公网安备 33010602011771号