工具篇-Json处理
2024-10-18 21:19:06
1. @JsonProperty和@SerializedName注解
- 使用场景
将一个json格式的字符串转换成某个java对象,或者将一个java对象转换成json格式的字符串时,如果json字符串中的字段跟java对象中定义的属性名不一致,需要在java对象的属性上加上@JsonProperty或@SerializedName进行转换。
- 示例
@JsonProperty("jsonName")
private String name;
或者 @SerializedName("jsonName")
private String name;
- 区别
JsonProperty注解使用的是Jackson包,SerializedName注解使用的是Gson包,使用时避免包冲突。附上两个包的官方网站:
2. FastJson(该部分主要参考:FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换)
FastJson主要用到了以下三个类:
JSON:FastJson的解析器,用于JSON格式字符串、JSON对象及javaBean之间的转换;
Json对象JSONObject;
Json数组对象JSONArray。
JSONObject和JSONArray继承了JSON,可以直接用于转换。首先,JSONObject本质上可以看作一个Map<String,Object>
public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler {
然后,JSONArray本质上可以看作是一个List<Object>
public class JSONArray extends JSON implements List<Object>, Cloneable, RandomAccess, Serializable {
FastJson的一些使用如下所示:
Json串转换成JSONObject
原始字符串:
{"header":{"code":0,"message":"SUCCESS"},"data":{"id":48,"metric.name":"test_hk_1","metric.type":"kafka_commit","partition.lag":false,"group.id":""}}
转换过程:
import com.alibaba.fastjson.JSONObject;
JSONObject jsonObject = JSONObject.parseObject(contentAsString).getJSONObject("data");
- JSONObject转换成Json字符串
String str = JSONObject.toJSONString(jsonObject);
- Json字符串转换成JSONArray
原始字符串
private static final String JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
转换过程
import com.alibaba.fastjson.JSONArray;
JSONArray jsonArray = JSONArray.parseArray(JSON_ARRAY_STR); for (Object obj : jsonArray) {
JSONObject jsonObject = (JSONObject) obj;
}
}
- Json字符串转换成JavaBean
原始字符串同上例,JavaBean如下所示
public class Student { private String studentName;
private Integer studentAge; public String getStudentName() {
return studentName;
} public void setStudentName(String studentName) {
this.studentName = studentName;
} public Integer getStudentAge() {
return studentAge;
} public void setStudentAge(Integer studentAge) {
this.studentAge = studentAge;
}
}
转换过程
Student student = JSONObject.parseObject(JSON_OBJ_STR, new TypeReference<Student>() {});
或者
Student student = JSONObject.parseObject(JSON_OBJ_STR, Student.class);
- JavaBean转换成Json字符串
String res = JSON.toJSONString(student);
⚠️注意⚠️:如果这里student对象没有getter方法,无法转换成Json字符串的。另外,在转换Json字符串的过程中,可以对特殊字段进行设置,比如将对象中属性的null值输出:
1 String str = JSONObject.toJSONString(student, SerializerFeature.WriteMapNullValue);
QuoteFieldNames | 输出key时是否使用双引号,默认为true |
WriteMapNullValue | 输出值为null的字段,是否默认为false |
WriteNullNumberAsZero | 数值字段如果为null,输出为0,而非null |
WriteNullListAsEmpty | List字段如果为null,输出为[],而非null |
WriteNullStringAsEmpty | 字符类型字段如果为null,输出为"",而非null |
WriteNullBooleanAsFalse | Boolean字段如果为null,输出为false,而非null |
- JavaBean转换成JSONObject或者JSONArray对象
JSONObject jsonObject = (JSONObject)JSON.toJSON(student);
- 克隆对象
浅拷贝
JSONObject b = new JSONObject(a);
深拷贝
JSONObject b = (JSONObject)a.clone();
上边的深拷贝不好使的话,可以考虑下边这个
private Object deepCopyByJson(Object obj) {
String json = JSON.toJSONString(obj);
return JSON.parseObject(json, Object.class);
}
3. Json字符串格式
json字符串中null类型的value如下所示:
"{\"header\":{\"code\":34,\"message\":\"job id doesn't exist.\"},\"data\":null}"
boolean,int等类型的value如下所示:
"{\"header\":{\"code\":0,\"message\":\"SUCCESS\"},\"data\":{\"id\":,\"metric.type\":\"kafka_commit\",\"consumer.zk.host\":\"\",\"consumer.zk.port\":2181,\"consumer.zk.root\":\"/brokers\",\"enabled\":true,\"group.id\":\"\"}}"
最新文章
- Python学习实践------正向最大匹配中文分词
- BZOJ 3343: 教主的魔法 [分块]【学习笔记】
- xss小试
- 四 AndEngine 画线
- Project Euler 80:Square root digital expansion 平方根数字展开
- php 对象的执行
- 魔兽世界---屠夫(Just a Hook)
- Flash Builder4.7安装破解
- [物理学与PDEs]第2章习题5 正应力的平均值
- 微服务化的大坑之一:当dubbo神器碰上共用注册中心和错误的暴露接口
- vue 之 .sync 修饰符
- ZOJ 2110 DFS
- TeamLab安装及使用
- C++ QT中自定义控件的简单创建
- bootstrap table使用及遇到的问题
- linux每日命令(25):Linux文件类型与扩展名
- 记录python接口自动化测试--根据excel中的期望输出是否存在请求返回的响应来判断用例是否执行成功(第八目)
- matplotlib01
- Windows系统下搭建Appium自动化测试框架
- linux的一些软件基本安装