Gson 是一个 Java 库,可用于将 Java 对象转换为 JSON 字符串表示。
1 Gson 实例
1.1 class 和 string 转化
JSONObject是个好东东,可以将java class 分分钟变成json 传递
语法说明keyword: toJson and fromJson
eg1:
// 简单的bean转为json
String s1 = gson.toJson(student1);
System.out.println("简单Bean转化为Json===" + s1);
// json转为简单Bean
Student student = gson.fromJson(s1, Student.class);
System.out.println("Json转为简单Bean===" + student);
// 结果:
// 简单Bean转化为Json==={"id":1,"name":"李坤","birthDay":"Jun 22, 2012 8:27:52 AM"}
// Json转为简单Bean===Student [birthDay=Fri Jun 22 08:27:52 CST 2012, id=1,
https://blog.csdn.net/lk_blog/article/details/7685169
1.2 看一个复杂点的例子
//Gson:class转成json的常用方法getJson
public JSONObject getJson() {
Gson gson = new Gson();
try {
return new JSONObject(gson.toJson(this));
} catch (JSONException e) {
e.printStackTrace();
return new JSONObject();
}
}
//调用
private final BlockingQueue<CloudAgentSecondaryDevice> mSDIQueue = new LinkedBlockingQueue<>();
CloudAgentAttachedMonitor mon = new CloudAgentAttachedMonitor();
// set json value
mon.setRefreshRate(refresh);
mon.setResolution(resolution);
...
mSDIQueue.add(mon);
List<CloudAgentSecondaryDevice> availableDevices = new ArrayList<>();
synchronized (mSDIQueue) {
//将BlockingQueue转成List; 用基类指向多种类型的子类
mSDIQueue.drainTo(availableDevices);
}
if (!availableDevices.isEmpty()) {
CloudAgentSecondaryDeviceInfoEvent sdiEvt = new
CloudAgentSecondaryDeviceInfoEvent();
//List<CloudAgentSecondaryDevice>
sdiEvt.setAttachedDevices(availableDevices);
CloudAgentInfoMessage caiMsg = new CloudAgentInfoMessage(SDI_FRM_TAG +
String.valueOf(sdiEvt.hashCode()), sdiEvt);
//GSOn的强大,将list中的多个class,都转成了json data string.eg:ip mic+ monitor+camera
System.out.println(caiMsg.getJson().toString());
}
2 annotation
语法说明keyword:
@Expose注解:作用,变量暴露可见,所有需要序列化的variable都要有,没有它的variable不能序列化.required。
@SerializedName注解: 作用,改名.optional。
如果peer回来的和本地不匹配,可以改动这个而不改代码,但是有个缺点,改名则搜索不容易正确找到。
3 JSONObject 和gson 关系
两种方式都可以将class 转成string。gson.toJson 转成 json string. JSONObject 转成json 对象,当使用string的时候,使用toString.
eg2: JSONObject temp = JSONObject(gson.toJson(student1));
String s1 = temp.toString();
System.out.println("简单Bean转化为Json===" + s1);