gson简单教程(一)

来源:互联网 发布:mac arp 嗅探工具dmg 编辑:程序博客网 时间:2024/05/01 17:53

终于做到开发的位置了,哈哈哈,公司的项目很大,省级项目,至于是哪个方面的,那就不方便透露了.这个项目中很多我之前未接触到的.首先是gson,他就是谷歌的一个json的项目罢了.
这里我只注重应用,不讲原理,有兴趣可以自己研究.
第一步:将gson进行序列化和反序列化,项目中,只把int,long,double序列化了.

public class IntegerDefault0Adapter implements JsonSerializer<Integer>, JsonDeserializer<Integer> {@Overridepublic Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)        throws JsonParseException {    try {        if (json.getAsString().equals("") || json.getAsString().equals("null")) {//定义为int类型,如果后台返回""或者null,则返回0            return null;        }    } catch (Exception ignore) {    }    try {        return json.getAsInt();    } catch (NumberFormatException e) {        throw new JsonSyntaxException(e);    }}@Overridepublic JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) {    return new JsonPrimitive(src);}}

2.注册适配器 ,项目中这里被封装成util

public class GsonUtil {static Gson gson;public static Gson getGson(){    if(gson == null){        gson=  buildGson();    }    return gson;}/** * 增加后台返回""和"null"的处理 * 1.int=>0 * 2.double=>0.00 * 3.long=>0L * * @return */public static Gson buildGson() {    if (gson == null) {        gson = new GsonBuilder()                .registerTypeAdapter(Integer.class, new IntegerDefault0Adapter())                .registerTypeAdapter(int.class, new IntegerDefault0Adapter())                .registerTypeAdapter(Double.class, new DoubleDefault0Adapter())                .registerTypeAdapter(double.class, new DoubleDefault0Adapter())                .registerTypeAdapter(Long.class, new LongDefault0Adapter())                .registerTypeAdapter(long.class, new LongDefault0Adapter())                .create();    }    return gson;}}

3.利用其formjson方法获取
这是转载另一个博客的文章:
Gson提供了fromJson()方法来实现从Json相关对象到Java实体的方法。
在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构。
先来看第一种:
比如json字符串为:[{“name”:”name0”,”age”:0}]

Person person = gson.fromJson(str, Person.class);

提供两个参数,分别是json字符串以及需要转换对象的类型。
第二种,转换成列表类型:

    List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());

可以看到上面的代码使用了TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。

调试注意:
经过Gson解析成为map的数据,经常需要通过map.get(key)获取类型为Object的值,我们常需要将Object进行强制转换,转换为我们需要的类型。这里注意,若我们想将整形数字1存入json串,经gson解析后,可能会变成1.0,这样我们只能使用Double类对其进行强转,再使用Double类型的intValue()方法将其转为整形。

0 0
原创粉丝点击