- 浏览: 733527 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
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 5169nginx反向代理后,打开页面很慢 在做前后端完全分离的 ... -
【国】前后端国际化的问题
2020-04-23 17:21 1006前端有国际化,但是后端service无法使用国际化。 原 ... -
父页面与子页面的相互调用
2017-12-14 14:51 2566一、在页面里用 open ... -
(转)Java jacob调用打印机打印word文档
2017-12-01 17:33 3759折腾了好久,最终决定由用一个第三方的,找到了jacob,还不 ... -
BIRT参数设置详解
2016-05-18 15:15 4398在使用birt报表的时候感 ... -
(转)FindBugs规则整理
2015-12-18 10:40 6614FindBugs是基于Bug Patterns ... -
Gson注解和GsonBuilder
2015-04-07 11:49 1694//注意这里的Gson的构建方式为GsonBuilder, ... -
Spring AOP 的@Aspect (转)
2015-03-03 15:50 905从Spring 2.0开始,可以使用基于schema及@As ... -
Hibernate一对多和多对一关系详解 (转载)
2014-07-10 17:00 1838双向一对多关系,一是关系维护端(owner side),多是关 ... -
Struts2的Action如何交给spring来管理
2014-07-10 11:35 852我的Action是 <package name=&qu ... -
javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
2014-06-04 20:26 1812javax.xml.ws.soap.SOAPFaultExce ... -
照片打包下载
2014-05-22 09:32 1226设计思路: 通过业务表中照片编号获得需要下载的照片列表 ... -
获得请求IP
2013-12-06 14:18 1112在AbstractInterceptor中 Action ... -
Oracle merge 合并
2013-10-21 09:38 1324@Transactional public void ... -
httpclient测试请求方法
2013-09-22 15:24 3698貌似很多人不知道服务器端代码怎么写,在此mark一下: ... -
jxl导入excel
2013-09-17 16:56 932jxl读取excel和写excel基本类似,只是Writab ... -
Apache与Nginx的优缺点比较(转)
2013-08-26 11:13 11681、nginx相对于apache的优点: 轻量级,同样起we ... -
findbugs清理总结
2013-08-19 14:45 3014findbugs警告26个。主要有以下9类问题。 1、B ... -
JAX-WS开发webservice示例详解
2013-08-09 11:06 24072目录: 概述 实验环境 服务端的实现 客户端的实 ... -
将传进来的十六进制表示的字符串转换成byte数组 文件下载
2013-06-06 22:36 1791/** * 将传进来的十六进制表示的字符串转换成by ...
相关推荐
好不容易找到的gson的jar包,上传分享。谢谢支持! Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
Gson.jar gson-2.7.jar GSON jar包 gson需要的所有jar,这是自己用的,保证稳定可用,现在分享给大家啦~~~欢迎下载讨论!
本文将深入探讨如何利用Gson库进行对象到JSON以及JSON到对象的转换,并分享一个示例项目——GsonDemo。 首先,让我们了解Gson库的基本概念。Gson是Google开发的一个开源库,它的主要功能是将Java对象转换为它们对应...
在Java项目中,通常会将依赖的第三方库以JAR文件的形式添加到项目的类路径中,以便在编译和运行时使用其功能。 在"压缩包子文件的文件名称列表"中,只列出了"Json包",这意味着压缩包可能只有一个文件,即gson-...
json解析工具Google官网提供 分享给大家学习
javaweb/javaee 常用jar包,亲测可用,若需其他版本其他jar包请留言我看到后会上传分享
javaweb/javaee 常用jar包,亲测可用,若需其他版本其他jar包请留言我看到后会上传分享
javaweb/javaee 常用jar包,亲测可用,若需其他版本其他jar包请留言我看到后会上传分享
javaweb/javaee 常用jar包,亲测可用,若需其他版本其他jar包请留言我看到后会上传分享
javaweb/javaee 常用jar包,亲测可用,若需其他版本其他jar包请留言我看到后会上传分享
javaweb/javaee 常用jar包,亲测可用,若需其他版本其他jar包请留言我看到后会上传分享
javaweb/javaee 常用jar包,亲测可用,若需其他版本其他jar包请留言我看到后会上传分享
在Java编程语言中,获取视频分享信息涉及到网络编程、数据解析和可能的API交互。这里我们将探讨如何使用Java实现这一目标,以及与之相关的技术点。 首先,我们需要明确获取视频分享信息的方式。通常,这可以通过...
SpringBoot 提供了多种方式来实现 RESTful API 接口统一 JSON 格式返回,包括使用 Jackson 库、使用 Gson 库、使用 Fastjson 库等。 4. SpringBoot Validation 优雅的全局参数校验 SpringBoot 提供了多种方式来...
在JavaWeb环境下,可以使用Http客户端库(如Apache HttpClient或OkHttp)发起HTTP请求,获取所需的JSON响应,然后使用JSON解析库(如Jackson或Gson)进行解析。 在获取微信Token的过程中,由于Token的有效期通常较...
- 如果返回的是JSON数据,可以使用Gson或Jackson库进行解析。 5. **下载文件**: - 一旦找到真实下载地址,就可以使用`java.nio`包或者第三方库如`Apache Commons IO`来下载文件。设定输出流,将文件内容写入本地...
VolleyDemo是一个示例项目,展示了如何在Android应用中使用Volley进行网络请求,并进行了分享功能的扩展,以及使用Gson库将JSON数据转换为对象。 首先,Volley的核心组件包括RequestQueue、NetworkDispatcher和...
Java中可以使用Gson、Jackson或org.json等库来解析JSON。例如,使用Gson解析JSON数据: ```java Gson gson = new Gson(); WeatherData weatherData = gson.fromJson(responseStream, WeatherData.class); ``` 这里...
可能还涉及到JSON解析,如使用Gson或Jackson库将服务器返回的数据转化为Java对象。 3. **数据存储**:本地数据存储可能使用SQLite数据库保存用户偏好、已下载游戏等信息。同时,SharedPreferences用于存储轻量级...
- 可以使用`Intent.createChooser()`创建自定义的分享选择器。 8. **测试与调试**: - 使用单元测试框架如JUnit测试代码逻辑, Espresso进行UI测试。 - 使用Android Studio的调试工具进行性能分析和内存泄漏检查...