Gson使用技巧
1. CharMatcher
String serviceUrl = CharMatcher.is('/').trimTrailingFrom(ConfigHelper.metaServiceUrl()) + "/storage/query?appid=" + ConfigHelper.appId() + "&feature=1";
2. Precondition
Preconditions.checkArgument(!Strings.isNullOrEmpty(namespace), "参数namespace不能为空");
3. JsonParser
JsonObject content = new JsonParser().parse(response).getAsJsonObject();
int status =content.get("status").getAsInt();
if (status != 200)
throw new Exception("加载meta信息出现异常,status:" + status);
for (JsonElement jsonElement : content.get("result").getAsJsonArray()) {
JsonObject item = jsonElement.getAsJsonObject();
StorageInfo storage = new StorageInfo();
String namespace = item.get("namespace").getAsString().toLowerCase();
storage.setStorageName(item.get("storageName").getAsString());
storage.setStorageType(StorageType.fromId(item.get("storageType").getAsInt()));
result.put(namespace, storage);
}
4. Strings
Strings.isNullOrEmpty(namespace)
5. 对于bean 中有部分属性需要忽略
解决方案:(使用ExclusionStrategy)
创建注解类 Exclude
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Exclude {
}
在gson中配置 忽略带有Exclude的属性:
Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy(){
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getAnnotation(Exclude.class) != null;
} @Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
})
使用时在需要忽略的属性上标记@Exclude 即可:
class Mock{
String name;
String age;
@Exclude
String gender;
}
------------------------
指定哪些是要暴露转换的属性
@Expose
private Integer businessId;
但这个时候要用
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
BusinessSystem bus = (BusinessSystem) (gson.fromJson(data,
BusinessSystem.class));
6. 自定义序列化字段名字
@SerializedName("email_address")
public String emailAddress;
7. 泛型在Gson中的使用
//数组
String jsonss = "[\"aa\",\"bb\",\"cc\"]";
String[] ss = gson.fromJson(jsonss, String[].class);
for (String s:ss) {
Log.i(TAG,s);
}
String s = gson.toJson(ss);
Log.i(TAG,s); //List
List<String> list=gson.fromJson(jsonss, new TypeToken<List<String>>() {}.getType());
List<User> list=gson.fromJson(jsonss, new TypeToken<List<User>>() {}.getType());
//也就是说,GSON把json转换为JAVA泛型对象的时候,要先定义好
//Type collectionType = new TypeToken<GenericModel<Integer>>(){}.getType()
Gson使用技巧的更多相关文章
- Android Studio 使用技巧
1.导入Android Studio 工程的一些技巧 因为Gradle版本的问题,我们在使用AS导入工程的时候,经常会碰到本地没有该项目的Gradle版本,这时候AS就会去下载这个版本的Gradle, ...
- Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/12 ...
- Rxjava +Retrofit 你需要掌握的几个技巧,Retrofit缓存,RxJava封装,统一对有无网络处理,异常处理, 返回结果问题
本文出处 :Tamic 文/ http://blog.csdn.net/sk719887916/article/details/52132106 Rxjava +Rterofit 需要掌握的几个技巧 ...
- 你真的会用Gson吗?Gson使用指南(3)
原文出处: 怪盗kidou 注:此系列基于Gson 2.4. 本次的主要内容: 字段过滤的几种方法 基于@Expose注解 基于版本 基于访问修饰符 基于策略(作者最常用) POJO与JSON的字段映 ...
- Gson 使用new TypeToken<List<String>>(){}.getType() 为什么有 {}?
前言:使用 gson 时,不明白为什么有这种写法:new TypeToken<List<String>>(){}.getType(),所以来解惑.最终发现其实就是自己的 jav ...
- Gson 使用总结 高级用法
Gson基本用法 参考:http://www.jianshu.com/p/e740196225a4 Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列 ...
- (转载)更新到Retrofit2的一些技巧
更新到Retrofit2的一些技巧 作者 小武站台 关注 2016.02.22 22:13* 字数 1348 阅读 1621评论 0喜欢 5赞赏 1 原文链接:Tips on updating to ...
- 6个技巧加速你的gradle编译
近期我们都在讨论build系统,我们看了一些技巧能够让你的Maven build更快. 结论和反映都势不可挡.由于我们提供的技巧,很多其它的人都非常高兴能加快他们完毕自己的项目.如今,让我们看一下怎么 ...
- Android Studio 3.0 及以上版本使用技巧总结
1.更新Android Studio后下载Gradle文件的技巧 更新到3.0版本后,可能会出现创建新项目一直停留在如下图的界面: 选择等待?不知道要等到什么时候,这时候怎么办呢?显然,不能一直等待下 ...
随机推荐
- 两次内存断点法寻找OEP
所谓“两次内存断点法寻找OEP”,按照<加密与解密*第三版>上的解释来说,就是这样的.一般的外壳会依次对.text..rdata..data..rsrc区块进行解压(解密)处理,所以,可以 ...
- InstrumentDriver,对iOS自动化测试说 Yes!
InstrumentDriver 是 Mobile自动化小组最近实现的基于 instrument,针对 iOS 的自动化测试框架,目前支持 java 语言编写测试用例. 研究过iOS自动化测试的同学肯 ...
- 转载:安装Ubuntu 15.10后要做的事
转载:安装Ubuntu 15.10后要做的事 原文转载于:http://blog.csdn.net/skykingf/article/details/45267517 Ubuntu 15.10发布了, ...
- OSI网络体系结构
为把在一个网络结构下开发的系统与在另一个网络结构下开发的系统互连起来,以实现更高一级的应用,使异种机之间的通信成为可能,便于网络结构标准化,国际标准化组织(ISO)于1983年形成了开放系统互连基本参 ...
- 【转载】Ubuntu安装之,硬盘分区
关于分区 如果你只是简单地想用上Ubuntu,可以这样操作:1)如果你是直接将整个硬盘都用来装Ubuntu,机器上没有需要保存的数据,或者已经做好备份的情况下,可以直接在Ubuntu分区时选择“向导─ ...
- [IR] Search Server - Sphinx
使用 Sphinx 更好地进行 MySQL 搜索 - IBM 尽管 MySQL 是一个出色的通用数据库,但是如果您的应用程序需要进行大量搜索,那么使用 Sphinx 可获得更好的性能. 尽管 Sphi ...
- SQLSVR 之 EXISTS
来个实例看看 CREATE TABLE #temp( id BIGINT, name VARCHAR(max), age INT ) CREATE TABLE #tempmain( id BIGINT ...
- IOS Https适配摸索
转:http://www.jianshu.com/p/f312a84a944c https封面 在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Store中的所 ...
- Installation Guide Ubuntu 16.04
Beside the installation guide on the main page, here is a guide to install GenieACS off a freshly in ...
- print 与标准输出
print会自动添加换行符 其它的,没什么区别.有时候为了使用灵活,才会这么用. 例如你想把print的内容写向一下log文件,你可以这么做 stdout_bk = sys.stdout #备份一下标 ...