为什么转用Gson了,FastJSON bug实在是太多了!
依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.3</version>
</dependency>
pojo
class JsonBean{
int code;
String msg;
Object extend;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getExtend() {
return extend;
}
public void setExtend(Object extend) {
this.extend = extend;
}
}
谷歌Gson解析json
String json = "{\"code\":100,\"msg\":\"处理成功!\",\"extend\":{\"jsonString\":{\"userId\":1,\"userName\":\"123\",\"userPwd\":\"123\"}}}";
JsonObject jsonObject = (JsonObject) new JsonParser().parse(json).getAsJsonObject();
System.out.println(jsonObject.get("msg").getAsString());//获取msg key的值
System.out.println(jsonObject.get("code").getAsInt());//获取code key的值 输出格式为int
JsonObject extend = jsonObject.getAsJsonObject("extend");//获取extend 节点JSonObject 对象
System.out.println(extend.get("jsonString"));//获取jsonString 值
System.out.println(extend.get("jsonString").getAsJsonObject());//获取jsonString 作为JSonObject 对象
System.out.println(extend.get("jsonString").getAsJsonObject().get("userId"));//获取userId值
json转java对象
//json转java对象
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(json, JsonBean.class);
System.out.println("json转java对象 " + jsonBean);
//java转json
System.out.println("java转json " + gson.toJson(jsonBean));
结果输出
在这里插入图片描述API
红色是转json对象
绿色是转java对象
其他的api暂时没涉及到。
在这里插入图片描述
序列化
序列化别名
@SerializedName("w");
String age;
当序列化的时候,会把Java bean中的字段age存储成w,在反序列化的时候会把Json的w这个key反序列化到Java bean的width字段上。
声明该字段不参与反序列化
@Expose(deserialize = false)
声明该字段序列化和反序列化都不参与
@Expose(serialize = false, deserialize = false)
要使该注解生效,必须对Gson进行配置
GsonBuilder builder = new GsonBuilder();
builder.excludeFieldsWithoutExposeAnnotation();
Gson gson = builder.create();
注意
只要有一个字段使用了Expose注解,所有需要参与序列化和反序列化的字段都要有这个注解 因为这个注解要么不生效,如果生效的话,就只会对有Expose注解的字段进行处理
网友评论