google gson简单使用案例

到官网下载完之后解压缩

要的只有一个gson-2.2.4.jar 我用的是2.2.4 大小是186kb


最重要的类是Gson


假设有如下的几个javabean

public class Person {
private int id;
private String name;
private List<String> items;
private Shabi shabi;


@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", items=" + items + ", age=" + age + "]";
}


public List<String> getItems() {
return items;
}


public void setItems(List<String> items) {
this.items = items;
}


public int getId222() {
return id;
}


public void setId222(int id) {
this.id = id;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public int getAge() {
return age;
}


public void setAge(int age) {
this.age = age;
}


private int age;


public Shabi getShabi() {
return shabi;
}


public void setShabi(Shabi shabi) {
this.shabi = shabi;
}
}


public class Shabi {
private int id;
private String name;
private String ceshi;


public int getId() {
return id;
}


public void setId(int id) {
this.id = id;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public String getCeshi() {
return ceshi;
}


public void setCeshi(String ceshi) {
this.ceshi = ceshi;
}
}


1从对象到json字符串

Gson g=new Gson();//采用默认方式构造一个Gson 如果有需要还可以利用GsonBuilder定制一个Gson

Person p = new Person();
p.setId222( 1 );
p.setName( "xzc" );
p.setAge( 20 );
p.setItems( Arrays.asList( "1", "22", "333", "4444" ) );
Shabi sb = new Shabi();
sb.setId( 2 );
sb.setName( "sb2" );
sb.setCeshi( "ceshi```123" );
p.setShabi( sb );
//上面几步用于把对象的关系设置好

String js = g.toJson( p );
System.out.println( js );// 构造后的表达式

//会输出{"id":1,"name":"xzc","items":["1","22","333","4444"],"shabi":{"id":2,"name":"sb2","ceshi":"ceshi```123"},"age":20}

2从json字符串到对象

Gson g = new Gson();
Person p = new Person();
p.setId( 1 );
p.setName( "xzc" );
p.setAge( 20 );
p.setItems( Arrays.asList( "1", "22", "333", "4444" ) );
Shabi sb = new Shabi();
sb.setId( 2 );
sb.setName( "sb2" );
sb.setCeshi( "ceshi```123" );
p.setShabi( sb );
String js = g.toJson( p );

//上面几步用于生成一个json字符串js
p = g.fromJson( js, Person.class );//如果js中没有指定某些属性(比如少了id),那么那些属性就不会被设置值(id默认就为0)

//根据字符串js,和类Person 创建出对象p
System.out.println( p.toString() );
System.out.println( p.getShabi().getName() );

3 上面都是以javabean对象为模型,构造的字符串

也可以使用JsonElement及其子类,手动构造

JsonElement下分有:

NULL 基本数据类型 对象 数组  


3.1 NULL用于标记是否为null而已(当然还有一些关于null的细节,具体看api文档)

 

3.2 JsonPrimitive表示了一些基本数据类型

看一下即可

 

3.3 对象,一个对象有多个属性

每个属性是一个JsonElement

 

3.4 数组 可以放多个JsonElement 可以同时有字符串和数字

 

记住如果使用JsonElement.getAdXXX之类的方法

如果失败了就会抛出异常

即使对应的值是null也会抛出异常


几个例子

JsonObject jo = new JsonObject();//创建一个obj
jo.addProperty( "name", "xzc" );//添加一个属性 name=xzc
System.out.println( jo.get( "name" ).getAsString() );//打印出来一下 确认
jo.addProperty( "name", "xzc2" );//再添加 name 就会盖掉原先的name
System.out.println( jo.get( "name" ).getAsString() );//打出xzc2

jo.add( "name", JsonNull.INSTANCE );//添加name=NULL 效果相当于是删除这个属性(不过总感觉有细微差别,这样还是存在一个属性name,只不过值是NULL?)

//System.out.println( jo.get( "name" ).getAsString() );//这句话会抛异常 因为对应的内容是NULL 不能转成字符串的null

数组 add的参数是一个JsonElement

JsonArray ja=new JsonArray();
ja.add( new JsonPrimitive( "123" ) );
ja.add( new JsonPrimitive( 7758 ) );
System.out.println(ja.toString());

4

JsonReader和JsonWriter

详情请看Gson的api文档

一个例子

        StringWriter sw=new StringWriter();

        JsonWriter jw=new JsonWriter( sw );

        jw.beginArray();

       

        jw.beginObject();

        jw.name("name").value( "xzc");

        jw.name("age" ).value( 20 );

        jw.endObject();

       

        jw.endArray();

       

        jw.close();

        sw.close();

        System.out.println(sw.toString());

json最外层肯定是一个Object或Array

所以肯定要beginArray或beginObject


5 一些Annotation

Gson根据对象产生json字符串,根据的是字段,而不是get,set方法

如果不想某个字段用于生成json字符串

需要这样做

@Expose(serialize=false,deserialize=false)

private int id;

如果需要修改某个字段在json字符串中的名称可以这样做

@SerializedName("xoo5")
private int id;
//那么生成的就是"xoo5":10 而不是 "id":10 了

最后还有@Since(1.2) @Until(1.5)

 给一个字段打上

@Since(1.2)表示这个字段是1.2版本才加进来的

@Until(1.5)表示这个字段1.5之后不再使用

当你构造Gson的时候使用 Gson g=new GsonBuilder().setVersion(1.1).create();的时候

的时候 被上面两个标记打上的字段都不会参与 序列化和反序列化

版本为1.3的时候 被上面两个标记打上的字段都会参与...

版本为1.7的时候 只有@Since(1.2)的 会参与

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值