LoganSquare的简单使用——快到爆炸地解析和序列化JSON
来源:互联网 发布:wincc 用c语言? 编辑:程序博客网 时间:2024/06/05 16:21
http://www.jianshu.com/p/9c3173b2e70b
下载安装
还在使用Eclipse的同学,很遗憾,无法使用LoganSquare 。Gradle 是 LoganSquare 唯一支持的配置方法。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}
}
apply plugin: 'com.neenbedankt.android-apt'
dependencies {
apt 'com.bluelinelabs:logansquare-compiler:1.1.0'
compile 'com.bluelinelabs:logansquare:1.1.0'
}
除了加入了LoganSquare依赖(只有19kb,真心小)还有apt插件,apt插件是用于运行时的注解处理的。
使用
Step1 对要转换的实体类注解
提供了3种类型的注解方案,主要是默认的接受转换的类属性范围有些微不同。空值的属性默认忽略。
1.全属性注解方案
/*
*所有属性接受解析和序列化。
* 作者推荐的方案,更少错误,但要打更多的注解。
*/
@JsonObject
public class Image {
/*
* 标准的属性注解
*/
@JsonField
public String format;
/*
* 解析和序列化时,该属性的key用"_id"代替"imageId"
*/
@JsonField(name = "_id")
public int imageId;
@JsonField
public String url;
@JsonField
public String description;
/*
* 注意虽然该属性只有包访问权限,但LoganSquare可毫无障碍地处理
*/
@JsonField(name = "similar_images")
List<Image> similarImages;
/*
* 不注解的属性默认被LoganSquare忽略
*/
public int nonJsonField;
/*
* !!!强烈注意private权限的属性必须提供getter和setter, 不然你会后悔的
*/
@JsonField
private int privateInt;
public int getPrivateInt() {
return privateInt;
}
public void setPrivateInt(int i) {
privateInt = i;
}
/*
* 还贴心地提供了解析完成后和序列化前的回调接口,当然是可选的
*/
@OnJsonParseComplete void onParseComplete() {
// 解析完成后干点什么
}
@OnPreJsonSerialize void onPreSerialize() {
//序列化前干点什么
}
}
2.非private属性注解方案
/*非private属性都会接受解析和序列化,即使属性没有写@JsonFields注解,但要先配置 fieldDetectionPolicy
* 这个方案比第一个方案写少点注解
*/
@JsonObject(fieldDetectionPolicy = FieldDetectionPolicy.NONPRIVATE_FIELDS)
public class Image {
/*
*普通声明的属性默认会被解析和序列化
*/
public String format;
/*
*重命名key还是需要注解来指出的
*/
@JsonField(name = "_id")
public int imageId;
public String url;
public String description;
/*
* 包访问权限的处理是没问题的
*/
List<Image> similarImages;
/*
* 用@JsonIgnore来忽略不想被解析和序列化的属性
*/
@JsonIgnore
public int nonJsonField;
/*
* 该策略下private属性默认忽略
*/
private int privateInt;
public int getPrivateInt() {
return privateInt;
}
public void setPrivateInt(int i) {
privateInt = i;
}
@OnJsonParseComplete void onParseComplete() {
// 解析完成后干点什么
}
@OnPreJsonSerialize void onPreSerialize() {
//序列化前干点什么
}
}
3.非private+Accessor注解方案
/*
* 与第2种类似,非private属性和所有有getter和setter的属性都会被解析和序列化。可以让某些private属性
* 也接受转换;
* 将 fieldDetectionPolicy 设置为FieldDetectionPolicy.NONPRIVATE_FIELDS_AND_ACCESSORS即可
*/
Step2 解析&序列化
将JSON对象解析为实体类
// 支持直接从InputStream解析
InputStream is = ...;
Image imageFromInputStream = LoganSquare.parse(is, Image.class);
// 从Json字符串解析
String jsonString = ...;
Image imageFromString = LoganSquare.parse(jsonString, Image.class);
实体类序列化为JSON对象
// Serialize it to an OutputStream
OutputStream os = ...;
LoganSquare.serialize(image, os);
// Serialize it to a String
String jsonString = LoganSquare.serialize(image);
混淆
-keep class com.bluelinelabs.logansquare.** { *; }
-keep @com.bluelinelabs.logansquare.annotation.JsonObject class *
-keep class **$$JsonObjectMapper { *; }
文/炊事班程序猿小谢(简书作者)
原文链接:http://www.jianshu.com/p/9c3173b2e70b
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
- LoganSquare的简单使用——快到爆炸地解析和序列化JSON
- 使用Jackson解析JSON和序列化
- android:Retrofit+LoganSquare的简单用法
- json的解析和序列化
- JSON的自定义序列化和解析
- 说说使用 JavaScript 解析以及序列化 JSON 的方法
- json数据解析<一> JSONObject和JSONArray的简单使用
- Json序列化和反序列化的简单封装
- JSON数据序列化和解析
- JavaScript解析和序列化JSON
- jackson 进行json解析和序列化
- JavaScript中的json解析和序列化
- Jackson进行JSON解析和序列化
- Jackson进行JSON解析和序列化
- C# LitJson Json序列化简单使用
- Jackson Json进行JSON解析和序列化
- 序列化JSON格式数据的解析
- JSON的解析与序列化
- 编写自己的代码生成工具四:数据库信息查询实现
- SHELL笔记之让文本飞(四)
- CentOS 7 下 modutils-2.4.27 编译时遇到的问题
- com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1157 > 1024).
- eclipse配置maven + 创建maven项目(一)
- LoganSquare的简单使用——快到爆炸地解析和序列化JSON
- html运用(二) html5前端开发基础–html5 meta全解
- 5个最流行的可用于移动开发的嵌入式数据库简介
- 微信系统架构
- ViewConfiguration.getScaledTouchSlop () 用法
- 编写自己的代码生成工具五:代码生成实现
- unable to dequeue a cell with identifier Identify - must register a nib or a class for the identifie
- Git使用详细教程
- c语言:表达式求值实现(包含加减乘除括号)