zoukankan      html  css  js  c++  java
  • Gson的使用

    原文地址:http://www.cnblogs.com/Dentist/p/Mr_Dentist.html

    Gson拓展包可以很方便的实现在对象与Json之间的转换。他自己也有JsonObject这个类,类似于Android包里的JSONObject。在java(非Android项目)里就可以用他来操作json。

    先要导入Gson包:

    将gson-2.2.4.jar放入项目lib文件夹。然后项目刷新后右键-Build Path-Configure Build Path-->add jar在你的项目里找到它。

    另外。注意更新!!!下载地址:https://code.google.com/p/google-gson/downloads/list

    下面一个简单的例子:

    public class Person {
        private String name;
        private int age;
        
        public Person(String name,int age){
            this.name=name;
            this.age=age;
        }
    }

     1.Gson的序列化,对象与String之间的转换

            Person p=new Person("jack",18);
            Gson gson=new Gson();
            String json=gson.toJson(p);
            Log.i(TAG, json);

      输出结果: {"name":"jack","age":18}

      对象数组的也是自动转换

            ArrayList<Person> p=new ArrayList<Person>();
            p.add(new Person("jack",18));
            p.add(new Person("alex",23));
            p.add(new Person("jane",15));
            Gson gson=new Gson();
            String json=gson.toJson(p);
            Log.i(TAG, json);

      输出结果: [{"name":"jack","age":18},{"name":"alex","age":23},{"name":"jane","age":15}]

       2.Gson的反序列化,String与对象的转换

      jsonstr= {"name":"jack","age":18}

            Gson gson=new Gson();
            Person person=gson.fromJson(jsonstr, Person.class);

      

      jsonstr= [{"name":"jack","age":18},{"name":"alex","age":23},{"name":"jane","age":15}]

            Gson gson=new Gson();
            Person[] person1=gson.fromJson(jsonstr, Person[].class);

      对于数组类可以直接转。但对于集合类就必须要用TypeToken。它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。

            Gson gson=new Gson();
            ArrayList<Person> person2=gson.fromJson(jsonstr, new TypeToken<ArrayList<Person>>(){}.getType());

      还要说一下如果对象的某个值为null。这个属性将不会在String中显示。

            ArrayList<Person> p=new ArrayList<Person>();
            p.add(new Person("jack",18));
            p.add(new Person(null,23));
            p.add(new Person("jane",15));
            Gson gson=new Gson();
            String json=gson.toJson(p);
            Log.i(TAG, json);

      输出结果:[{"name":"jack","age":18},{"age":23},{"name":"jane","age":15}]

      如果要被序列化的String缺少某个属性例如上面的输出。也会转换成功。并且对应值为null。

     3.Gson序列化的类屏蔽

      比如你想将一个类的几个属性序列化,但他继承自一个很复杂的父类。你不想序列化他的父类。

      又或者你在反序列化一个类时,因为复杂的父类而序列化失败。

      使用这个类。屏蔽父类或属性类成员不应序列化的类。

    public class SpecificClassExclusionStrategy implements ExclusionStrategy {
    
        private final Class<?> excludedThisClass;
        private final Class<?> excludedThisClassFields;
    
        /***
         * 过滤器初始化
         *
         * @param excludedThisClass
         *            该类和继承自该类的对象实例将被忽略
         * @param excluedThisClassFields
         *            该类的属性将不被序列化
         */
        public SpecificClassExclusionStrategy(Class<?> excludedThisClass, Class<?> excluedThisClassFields) {
            this.excludedThisClass = excludedThisClass;
            this.excludedThisClassFields = excluedThisClassFields;
        }
    
        @Override
        public boolean shouldSkipClass(Class<?> clazz) {
            if (clazz == null) return false;
            if (clazz.equals(excludedThisClass)) return true;
            return shouldSkipClass(clazz.getSuperclass());
        }
    
        @Override
        public boolean shouldSkipField(FieldAttributes f) {
            return f.getDeclaringClass().equals(excludedThisClassFields);
        }
    
    }
    Gson gson2 = new GsonBuilder().setExclusionStrategies(new SpecificClassExclusionStrategy(null, Model.class)).create();
    PersonBrief.PersonBriefResult result = gson2.fromJson(response, PersonBrief.PersonBriefResult.class);

      感觉平时就用到这么多了。

      还有一个在对象与JsonObject直接转的。但这个JsonObject不是Android的JSONObject所以很少用。

            Person p=new Person("jack",18);
            Gson gson=new Gson();
            JsonElement jsonele=gson.toJsonTree(p);
            JsonObject json=jsonele.getAsJsonObject();
  • 相关阅读:
    ⑨.tomcat性能优化
    ⑧.tomcat安全优化
    Nginx.HSTS
    https证书auto
    ⑦.tomcat 常见故障
    ⑨mvstat
    ⑥.tomcat监控
    ⑥.tomcat多实例
    ⑤.tomcat的三种工作模式
    ④.tomcat配置文件server.xml
  • 原文地址:https://www.cnblogs.com/Jude95/p/Mr_Dentist.html
Copyright © 2011-2022 走看看