- 浏览: 721047 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
18335864773:
看了楼主写的用jxl生成excel。有地方用到了流,还特别强调 ...
jxl导出excel文件简单示例 -
shaoshou111:
查看Apache的并发请求数及其TCP连接状态netstat ...
Linux查看连接数,并发数 -
gengjunshi:
非常感谢哈,刚好在学webservice编程,很有用呢。
JAX-WS开发webservice示例详解 -
zcgewu:
encrypt2()和encrypt()有什么区别
JAVA实现AES加密 -
java爱好者92:
ireport的操作还是相对比较复杂的,帆软报表会相对简单一点 ...
iReport报表开发中常见的问题
一、 最基本的对象与JSON相互转换
1、 定义java对象
2、 相互转换的代码:
以上用到两种转换
二、 针对泛型的转换
1、 定义泛型
2、 转换方法
GSON把JSON转换为JAVA泛型对象时,要先定义好
告诉到底用什么类型,然后再用fromjson方法。
三、 使用setPrettyPrinting进行json的格式化
在使用setPrettyPrinting之前,打印的json为
在使用setPrettyPrinting之后,打印的json为
使用方法为
四、 使用setDateFormat进行json的时间进行格式化
项目中使用日期一般为DATE类型,有时不满足我们展示的要求,这时需要对日期进行格式化,GSON提供了setDateFormat的方法。
在使用setDateFormat之前,日期json为:
在使用setDateFormat之后,日期json为:
使用方法为
五、 使用transient指定不需要转换为json的属性
项目中,GSON的转换有时不需要过多的属性,需要对有些属性进行隐藏
可在对象中指定属性为transient类型如
如果在转为JSON时,此属性就不会出现。
六、 使用Expose注解,指定哪些属性需要转换为JSON
使用方法为excludeFieldsWithoutExposeAnnotation():
在对象中加入@Expose即可:
如果与transient同时存在,也不会转换。
七、 实体中属性的首字母大写
在GSON可以设计转成的JSON字符串属性首字母大写,也可以在属性中加入
使用方法为
生成的JSON字符串为:
如果在属性中加入
生成的JSON字符串为
八、 用版本来管理生成的JSON字符串
使用方法为:
实体中属性加入@Since(value = 1.0)即可,有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化的。版本升级新的字段可以用@Since(value = 2.0)来标识。可用setVersion(2.0)找到新的字段。
有的字段可以随着版本的升级而删除,用@Until(value = 2.0)可以实现这个功能。
九、 通过GSON的适配器,对属性进行处理
使用方法
1、 PackageState为需要转换的值:
2、 EnumSerializer需要实现序列与反序列
3、 处理类
返回的retItem.getState()已经改变
1、 定义java对象
public class ModelObject { private String name; private int val; private boolean status; private double f; private Date time; private Object obj; //get 与set方法 }
2、 相互转换的代码:
Gson gson = new Gson(); ModelObject modelObject = new ModelObject(); modelObject.setName("我的"); modelObject.setVal(12); modelObject.setF(10.01); modelObject.setStatus(true); modelObject.setTime(new Date()); String json = gson.toJson(modelObject); System.out.println(json); ModelObject modelObject1 = gson.fromJson(json, ModelObject.class); System.out.println(modelObject1.getF()); Map<String, Object> map = gson.fromJson(json, Map.class); System.out.println(map.get("name"));
以上用到两种转换
gson.toJson(object) //把对象转成JSON字符串 gson.fromJson(jsonStr,class)//把json字符串,转为对象
二、 针对泛型的转换
1、 定义泛型
public class GenericModel<T> { T vlue; public GenericModel(T value){ super(); this.vlue = value; } }
2、 转换方法
private static void typeJson(){ Gson gson = new Gson(); ModelObject modelObject = new ModelObject(); modelObject.setName("我的"); modelObject.setF(10.01); GenericModel<ModelObject> model = new GenericModel<ModelObject>(modelObject); //输出JSON String json = gson.toJson(model); System.out.println("json representation:"+json); //返回泛型的对象 Type collectionType = new TypeToken<GenericModel<ModelObject>>(){}.getType(); GenericModel<ModelObject> model1= gson.fromJson(json, collectionType); System.out.println(model1.vlue.getName()); List<Object> listOfString = new ArrayList<Object>(); listOfString.add("列表1"); listOfString.add("列表2"); ModelObject tt = new ModelObject(); String tt1 = gson.toJson(listOfString); tt.setObj(tt1); //输出JSON String json2 = gson.toJson(tt); System.out.println("json representation:"+json2); //返回泛型的对象 Type collectionType2 = new TypeToken<List<String>>(){}.getType(); ModelObject model2= gson.fromJson(json2, ModelObject.class); List<String> mo = gson.fromJson((String)model2.getObj(), collectionType2); System.out.println(mo); }
GSON把JSON转换为JAVA泛型对象时,要先定义好
Type collectionType2 = new TypeToken<Object>(){}.getType();
告诉到底用什么类型,然后再用fromjson方法。
三、 使用setPrettyPrinting进行json的格式化
在使用setPrettyPrinting之前,打印的json为
{"name":"我的","val":12,"status":true,"f":10.01,"time":"2015-04-07 10:30:22"}
在使用setPrettyPrinting之后,打印的json为
{ "name": "我的", "val": 12, "status": true, "f": 10.01, "time": "2015-04-07 10:30:43" }
使用方法为
Gson gson = new GsonBuilder().setPrettyPrinting().create();
四、 使用setDateFormat进行json的时间进行格式化
项目中使用日期一般为DATE类型,有时不满足我们展示的要求,这时需要对日期进行格式化,GSON提供了setDateFormat的方法。
在使用setDateFormat之前,日期json为:
{ "name": "我的", "val": 12, "status": true, "f": 10.01, "time": "Apr 7, 2015 10:34:30 AM" }
在使用setDateFormat之后,日期json为:
{ "name": "我的", "val": 12, "status": true, "f": 10.01, "time": "2015-04-07 10:35:05" }
使用方法为
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")// 时间转化为特定格式 .setPrettyPrinting() // 对json结果格式化 .create();
五、 使用transient指定不需要转换为json的属性
项目中,GSON的转换有时不需要过多的属性,需要对有些属性进行隐藏
可在对象中指定属性为transient类型如
private transient boolean status;
如果在转为JSON时,此属性就不会出现。
六、 使用Expose注解,指定哪些属性需要转换为JSON
使用方法为excludeFieldsWithoutExposeAnnotation():
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")// 时间转化为特定格式 .setPrettyPrinting() // 对json结果格式化 .excludeFieldsWithoutExposeAnnotation() //需要指定要暴露转换的属性 .create();
在对象中加入@Expose即可:
@Expose private boolean status;
如果与transient同时存在,也不会转换。
七、 实体中属性的首字母大写
在GSON可以设计转成的JSON字符串属性首字母大写,也可以在属性中加入
@SerializedName(value = "ddf"),来改变JSON字符串的属性值
使用方法为
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")// 时间转化为特定格式 .setPrettyPrinting() // 对json结果格式化 .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//会把字段首字母大写,注:对于实体中@SerializedName注释的不会生效 .create();
生成的JSON字符串为:
{ "Name": "我的", "Val": 0, "Status": true, "F": 10.01, "Time": "2015-04-07 11:27:37" }
如果在属性中加入
@SerializedName(value = "名称") private String name;
生成的JSON字符串为
{ "名称": "我的", "Val": 0, "Status": true, "F": 10.01, "Time": "2015-04-07 11:28:27" }
八、 用版本来管理生成的JSON字符串
使用方法为:
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")// 时间转化为特定格式 .setPrettyPrinting() // 对json结果格式化 .setVersion(1.0) //版本管理 .create();
实体中属性加入@Since(value = 1.0)即可,有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化的。版本升级新的字段可以用@Since(value = 2.0)来标识。可用setVersion(2.0)找到新的字段。
有的字段可以随着版本的升级而删除,用@Until(value = 2.0)可以实现这个功能。
九、 通过GSON的适配器,对属性进行处理
使用方法
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")// 时间转化为特定格式 .registerTypeAdapter(PackageState.class,new EnumSerializer())//定义自己的适配器 .create();
1、 PackageState为需要转换的值:
public enum PackageState { PLAY,UPDATE,UPDATEING,DOWNLOAD,DOWNLOADING, }
2、 EnumSerializer需要实现序列与反序列
public class EnumSerializer implements JsonSerializer<PackageState>, JsonDeserializer<PackageState> { @Override public PackageState deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException { if(arg0.getAsInt()<PackageState.values().length) return PackageState.values()[arg0.getAsInt()]; return null; } @Override public JsonElement serialize(PackageState arg0, Type arg1, JsonSerializationContext arg2) { // TODO Auto-generated method stub return new JsonPrimitive(arg0.ordinal()); } }
3、 处理类
public static void main(String[] args) { GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(PackageState.class,new EnumSerializer()); //适配器 Gson gson = builder.create(); PackageItem item = new PackageItem(); item.setName("每一天"); item.setSize("500M"); item.setState(PackageState.UPDATEING); String json = gson.toJson(item); System.out.println(json); String tt = "{\"name\":\"每一天\",\"state\":2,\"size\":\"500M\"}"; PackageItem retItem = gson.fromJson(tt, PackageItem.class); System.out.println(retItem.getState()); }
返回的retItem.getState()已经改变
发表评论
-
nginx反向代理后,打开页面很慢
2020-05-26 11:26 4869nginx反向代理后,打开页面很慢 在做前后端完全分离的 ... -
【国】前后端国际化的问题
2020-04-23 17:21 869前端有国际化,但是后端service无法使用国际化。 原 ... -
父页面与子页面的相互调用
2017-12-14 14:51 2457一、在页面里用 open ... -
(转)Java jacob调用打印机打印word文档
2017-12-01 17:33 3617折腾了好久,最终决定由用一个第三方的,找到了jacob,还不 ... -
BIRT参数设置详解
2016-05-18 15:15 4277在使用birt报表的时候感 ... -
(转)FindBugs规则整理
2015-12-18 10:40 6429FindBugs是基于Bug Patterns ... -
Gson注解和GsonBuilder
2015-04-07 11:49 1612//注意这里的Gson的构建方式为GsonBuilder, ... -
Spring AOP 的@Aspect (转)
2015-03-03 15:50 860从Spring 2.0开始,可以使用基于schema及@As ... -
Hibernate一对多和多对一关系详解 (转载)
2014-07-10 17:00 1786双向一对多关系,一是关系维护端(owner side),多是关 ... -
Struts2的Action如何交给spring来管理
2014-07-10 11:35 825我的Action是 <package name=&qu ... -
javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
2014-06-04 20:26 1695javax.xml.ws.soap.SOAPFaultExce ... -
照片打包下载
2014-05-22 09:32 1150设计思路: 通过业务表中照片编号获得需要下载的照片列表 ... -
获得请求IP
2013-12-06 14:18 1064在AbstractInterceptor中 Action ... -
Oracle merge 合并
2013-10-21 09:38 1242@Transactional public void ... -
httpclient测试请求方法
2013-09-22 15:24 3627貌似很多人不知道服务器端代码怎么写,在此mark一下: ... -
jxl导入excel
2013-09-17 16:56 866jxl读取excel和写excel基本类似,只是Writab ... -
Apache与Nginx的优缺点比较(转)
2013-08-26 11:13 11321、nginx相对于apache的优点: 轻量级,同样起we ... -
findbugs清理总结
2013-08-19 14:45 2930findbugs警告26个。主要有以下9类问题。 1、B ... -
JAX-WS开发webservice示例详解
2013-08-09 11:06 23933目录: 概述 实验环境 服务端的实现 客户端的实 ... -
将传进来的十六进制表示的字符串转换成byte数组 文件下载
2013-06-06 22:36 1719/** * 将传进来的十六进制表示的字符串转换成by ...
相关推荐
google开发的GSON使用的jar包,2.7版本,分享一下供大家使用
用google的gson 解析json数据 里面有解析数组的方式 可根据自己的json样式自己定制 使用新手 分享一下
好不容易找到的gson的jar包,上传分享。谢谢支持! Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
Gson.jar gson-2.7.jar GSON jar包 gson需要的所有jar,这是自己用的,保证稳定可用,现在分享给大家啦~~~欢迎下载讨论!
谷歌提供的GSON开源库,可以方便的解析JSON文件,分享给伙伴们。
找了好久总算找到了最新的, converter-gson-2.9.0.jar / retrofit-2.9.0.jar,分享使用,各位安心下载。
今天找了好久算是找齐了,分享共使用,明明设置了3积分为什么涨了那么多,奇了怪了,今天看到顺手改了下,各位安心下载。
在程序开发中,经常解析json,gson是一个不错的选择,现将完整gson2.8.0.jar包分享给需要的的人。
json解析工具Google官网提供 分享给大家学习
下面小编就为大家带来一篇完美解决gson将Integer默认转换成Double的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本来是想免费分享的,但是最低要求是2积分。这个东西在gitbub上耐心点应该可以找到
这种好东西居然官网下载不了,醉了,分享出来,可惜不能免资源分,只能选最小的两分了。没分的可以私聊我,虽然我不一定能看到。。。
下面小编就为大家带来一篇gson ajax 数字精度丢失问题的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇Android利用Gson解析嵌套多层的Json的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
使用原生的夜间模式、分享、反馈 包含搜索、收藏、检测更新等功能 所有踩到的坑都在项目里做了注释 用到的第三方: UI MaterialCalendarView MaterialSearchView PhotoView multiline-collapsingtoolbar ...
度盘秘享(secretshare),使用二维码分享文件,妈妈再也不用担心我被查水表了 你有一个苹果我有一个苹果,我们把自己的苹果给对方,于是我们都有了两个苹果。 但是问题来了,用百度网盘分享文件被菊爆了怎么办?为...
Gson库:这个相信很多人都在使用,但是直接导入 gson 的 jar 包,在 HTC Desire HD 这款手机上会抛出异常(TypeNotFoundException) Jackson库:这也是个 json 解析的,我们在做苹果推送后台的时候,后台用 java ...
1、集成友盟分享,登录,统计,推送; 2、集成zxing扫描二维码和生成二维码; 3、集成sqlite数据库存储信息; 4、使用webview加载网页版高德地图; 5、集成picasso图片加载框架; 6、集成takephoto从相机和相册获取...
本系统在客户端使用了Android Studio开发环境,使用了Gradle项目管理工具,同时,使用了OkHttp,Gson,Glide等开源类库。在服务器端使用了IntelliJ IDEA作为开发环境,使用了Maven项目管理工具,并使用Nginx实现了...
读写和分享“读写和共享”是一个Android应用程序,其开发目的是为编辑某种类型的文本文件(.txt,.c,.java,.xml,.cpp,.py)提供一个通用界面,并且我们可以与使用同一应用程序的其他android设备共享照片,视频,...