GSON学习总结

来源:互联网 发布:淘宝改评价怎么说 编辑:程序博客网 时间:2024/06/05 05:12

Gson是Google提供的用来在java对象和JSON数据之间进行映射的Java类库,可以将一个JSON字符串转成一个Java对象,或者反过来。

GSON生成JSON数据
Gson可以直接调用toJson的类方法,传入一个Bean生成对应的JSON字符串,在对应的字段上面加 @SerizlizedName(“n”)可以指定生成的JSON字符串中对应的键名。

@SerializedName(“NAME”) 注解,obj转JSON之后属性变成大写

Gson依赖

<dependency>    <groupId>com.google.code.gson</groupId>    <artifactId>gson</artifactId>    <version>2.4</version></dependency>

Gson 可以用注解的方式实现 列名转化:@SerializedName(“key的字符串”);

eg: public class Diaosi {    @SerializedName("Name")    private String name;    @SerializedName("School")    private String school;    @SerializedName("Has_girlfriend")    private boolean has_girlfriend;    @SerializedName("Age")    private double age;    @SerializedName("Car")    private Object car;    @SerializedName("House")    private Object house;    @SerializedName("Major")    private String[] major;    @SerializedName("Comment")    private String comment;    @SerializedName("Birthday")    private String birthday;}

利用Gson创建JSON数据

Gson gson=new Gson();System.out.println(gson.toJson(传Javabean对象));

改为

GsonBuilder g=new GsonBuilder();g.setPrettyPrinting();Gson gson=g.create();System.out.println(gson.toJson(wangxiaoer));

**注意:**private transient String ignore; transient修饰类里面的对象,在生成JSON对象的时候,不会发布出去。

重点:
Gson 可以使用注解灵活改变列名(构造函数)

Gson 可以使用transient隐藏不显示列名:javaBean中列属性private后面添加 transiant

eg:private transient String ignore;

Gson 可以使用GsonBuilder进行json美化工作

eg:GsonBuilder gsonBuilder=new GsonBuilder();        gsonBuilder.setPrettyPrinting();

Gson 可以使用setFieldNamingStrategy(new FieldNamingStrategy){ 使用回调函数,设置json输出格式}

eg:     gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() {            public String translateName(Field f) {                // TODO 自动生成的方法存根                if(f.getName().equals("name"))                    return "Name";                return f.getName();            }        });        Gson gson=gsonBuilder.create();        System.out.println(gson.toJson(wangxiaoer));

使用gson创建json还可以使用GsonBuider对象,首先实例化GsonBuilder,然后调用setPrettyPrinting()方法对使用这个对象的json样式排版处理,或还有其他方法,然后再调用这个对象的create()方法创建一个Gson对象。

生成json串的时候,有时需要个性化的设置.使用GsonBulder的

GsonBuilder.setFieldNamingStrategy(fieldNamingStrategy(){//重写translateName方法public translateName(Field F){if(f.getName().equals("name")){return "NAME";  //这个操作是: 如果遇到的是小写的name,则转换成大写的name}//否则原样输出return f.getName();}})

GSON解析
在java获取json数据,首先把json文件实例化为file对象,然后用file的工具类的静态方法转换成字符串,如FileUtils.readFileToString(file),然后实例化Gson对象,再调用fromJson方法解析json。

JSONObject可以将*.json文件解析成一个它的对象;Gson可以正向的生成,也可以解析成自己定义的一个JavaBean的对象

public class GsonReadSample {    public static void main(String[] args) throws IOException {        File file=new File(ReadJSONSample.class.getResource("/wangxiaoer.json").getFile());        String content=FileUtils.readFileToString(file);        Gson gson=new Gson();        Diaosi wangxiaoer=gson.fromJson(content, Diaosi.class);        System.out.println(wangxiaoer);    }}

注意:如果Gson对Json数据进行反解析

Gson  gson=new Gson();//将Json数据反解析为JavaBean对象DiaoSi ds=gson.fromJson(content,DiaoSi.class);

Gson解析json文件中的json串: gson.fromJson(json串文件,实体类.class);

gson的反解析:JavaBean和.json中的属性名要一致,否则返回为空。

JSONObject可以将*.json文件解析成一个它的对象,Gson可以正向的生成,也可以解析成自己定义的一个JavaBean的对象

GSON解析 带日期转换
Gson对Date格式处理并不好,可以通过GsonBuilder().setDateFormat(“yyyy-MM-dd”).create()设定date格式

Gson 带有日期转化的功能

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();DiaosiWithBirthday wangxiaoer = gson.from(content,DiaosiWithBirthday.class);//DiaosiWithBirthday的属性是java.util.Date的类型System.out.println(wangxiaoer.getBirthDay().toLocalString());

格式:gson.fromJson(“json串文件”,对应的实体类.class);

集合类的解析:在实际开发中,一般用集合类来代替数组,数组用得较少

Gson可以将json文件中的其他类型的数据,比如日期、数组等直接转换成java属性的集合类对象
Gson的优点:
(1)支持日期
(2)可以转换为对象
(3)集合操作

eg:private List<String> major;private Set<String> major;System.out.println(wangxiaoer.getMajor());System.out.println(wangxiaoer.getMajor().getClass());

GSON解析数组可以和集合无缝对接。

总结:
1.json数据是以键值对形式存储的,键值只能是string类型,value值可以是string.数组.boolean
2.JsonObject只能实现对象转成json字符串,不支持字符串转成对象,这是一大缺陷
3.谷歌提供的Gson功能就更加强大,不仅可以实现字符串和对象的相互转换,而且还能定制json字符串中的属性,包括忽略某些属性,修改属性名称等

功能:映射Java Object与json格式数据
1:通过Annotation注解来声明
2:支持自定义属性名称
3:支撑包含或排除属性
4:支持自定义接口自己完成解析/生成过程

注意:
Json-java库是使用反射库的Method获取信息来构建json;而Gson是使用反射类的Filed信息来构建json的。Json适用于移动端Android SDK,Gson适用于移动端开发

参考视频:http://www.imooc.com/learn/523