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 + "]";
    }

}
Book、Author
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":"我就是要和别人不一样"}]
    }

}
转JSON
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转其他

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("暂时没手机此种动物");
            }
        }
    }

}
枚举的应用

 

 

 

posted @ 2018-11-15 15:59  cmlx  阅读(372)  评论(0)    收藏  举报