FastJson介绍
JSON协议使用方便,越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的Json框架,Github地址:FastJson
FastJson特点
- FastJson数度快,无论序列化和反序列化,都是当之无愧的fast
- 功能强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
- 零依赖(没有依赖其它任何类库)
FastJson简单说明
FastJson对于json格式字符串的解析主要用到了下面三个类:
- JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换
- JSONObject:fastJson提供的json对象
- JSONArray:fastJson提供json数组对象
FastJson依赖包
Maven项目中需要使用FastJson进行Json格式字符串进行解析,在pom.xml中添加如下依赖包即可
<!-- 引入fastjson解析json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
非Maven项目如何添加依赖包自行搜索
FastJson的用法
FastJson提供了众多API,包括以下场景的使用:
JavaBean、List、Map、复杂集合 转换成Json字符串
Json字符串 转换成JavaBean、List、Map、复杂集合
在测试开发场景中,我们经常需要使用到以上场景,为了便于大家更好的使用FastJson来帮助我们的测试开发工作,针对一些常用的场景进行代码演示
准备工作
为了更好的给大家演示实例,需要做下准备工作:
准备JavaBean
准备Json字符串
JavaBean准备
SmsSend.java实体类:短信发送相关信息,包括手机号码、发送状态
public class SmsSend {
private String phone;
private String status;
public SmsSend() {
}
public SmsSend(String phone, String status) {
this.phone = phone;
this.status = status;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
Json字符串准备
{
"phone":"18812345001",
"status":"SEND_SUCCESS"
}
用法场景分类
常用场景包括各种对象转Json字符串和Json字符串转各种对象
各种对象转Json字符串
javaBean
转 Json字符串List<JavaBean>
转 Json字符串List<String>
转 Json字符串List<Integer>
转 Json字符串Map<String, JavaBean>
转 Json字符串Map<String, String>
转 Json字符串Map<String, Integer>
转 Json字符串Map<String, Object>
转 Json字符串List<Map<String,Object>>
转 Json字符串Map<String, List<JavaBean>>
转 Json字符串
其他对象转Json字符串,都使用
JSON.toJSONString(JavaBean)
API实现即可
JavaBean转Json字符串
public static void main(String[] args) {
//JavaBean 转 Json字符串
SmsSend smsSend1 = new SmsSend("18812345001","SEND_SUCCESS");
String json = JSON.toJSONString(smsSend1);
System.out.println(json);
}
输出结果:
{"phone":"18812345001","status":"SEND_SUCCESS"}
List<JavaBean>
转 Json字符串
public static void main(String[] args) {
//List<JavaBean> 转 Json字符串
SmsSend smsSend2 = new SmsSend("18812345002", "SEND_SUCCESS");
SmsSend smsSend3 = new SmsSend("18812345003", "SEND_SUCCESS");
List<SmsSend> smsSendList = Lists.newArrayList(smsSend2,smsSend3);
String smsSendListJson = JSON.toJSONString(smsSendList);
System.out.println(smsSendListJson);
}
输出结果:
[{"phone":"18812345002","status":"SEND_SUCCESS"},{"phone":"18812345003","status":"SEND_SUCCESS"}]
List<String>
转 Json字符串
public static void main(String[] args) {
//List<String> 转 Json字符串
List<String> stringList = Lists.newArrayList("北京", "上海", "深圳", "杭州");
String stringListJson = JSON.toJSONString(stringList);
System.out.println(stringListJson);
}
输出结果:
["北京","上海","深圳","杭州"]
List<Integer>
转 Json字符串
public static void main(String[] args) {
//List<Integer> 转 Json字符串
List<Integer> integerList = Lists.newArrayList(1,2,3,4);
String integerListJson = JSON.toJSONString(integerList);
System.out.println(integerListJson);
}
输出结果:
[1,2,3,4]
Map<String, JavaBean>
转 Json字符串
public static void main(String[] args) {
.....
//Map<String, A> 转 Json字符串
Map<String, SmsSend> smsSendMap = Maps.newHashMap();
smsSendMap.put("smsSend1", smsSend1);
smsSendMap.put("smsSend2", smsSend2);
smsSendMap.put("smsSend3", smsSend3);
String smsSendMapJson = JSON.toJSONString(smsSendMap);
System.out.println(smsSendMapJson);
}
输出结果:
{"smsSend1":{"phone":"18812345001","status":"SEND_SUCCESS"},"smsSend2":{"phone":"18812345002","status":"SEND_SUCCESS"},"smsSend3":{"phone":"18812345003","status":"SEND_SUCCESS"}}
Map<String, String>
转 Json字符串
public static void main(String[] args) {
//Map<String, String> 转 Json字符串
Map<String, String> stringMap = Maps.newHashMap();
stringMap.put("浙江省会", "杭州");
stringMap.put("江西省会", "南昌");
stringMap.put("湖南省会", "长沙");
String stringMapJson = JSON.toJSONString(stringMap);
System.out.println(stringMapJson);
}
输出结果:
{"浙江省会":"杭州","湖南省会":"长沙","江西省会":"南昌"}
Map<String, Integer>
转 Json字符串
public static void main(String[] args) {
//Map<String, Integer> 转 Json字符串
Map<String, Integer> integerMap = Maps.newHashMap();
integerMap.put("语文", 90);
integerMap.put("数学", 97);
integerMap.put("英语", 95);
String integerMapJson = JSON.toJSONString(integerMap);
System.out.println(integerMapJson);
}
输出结果:
{"数学":97,"语文":90,"英语":95}
Map<String, Object>
转 json字符串
public static void main(String[] args) {
//Map<String, Object> 转 json字符串
Map<String, Object> objectMap = Maps.newHashMap();
objectMap.put("浙江省会", "杭州");
objectMap.put("江西省会", "南昌");
objectMap.put("湖南省会", "长沙");
String objectMapJson = JSON.toJSONString(objectMap);
System.out.println(objectMapJson);
}
输出结果:
{"浙江省会":"杭州","湖南省会":"长沙","江西省会":"南昌"}
List<Map<String,Object>>
转 Json字符串
public static void main(String[] args) {
//List<Map<String,Object>> 转 Json字符串
Map<String, Object> objectMap2 = Maps.newHashMap();
objectMap2.put("浙江省会", "杭州");
objectMap2.put("江西省会", "南昌");
objectMap2.put("湖南省会", "长沙");
Map<String, Object> objectMap3 = Maps.newHashMap();
objectMap3.put("江苏省会", "南京");
objectMap3.put("安徽省会", "合肥");
objectMap3.put("四川省会", "成都");
List<Map<String, Object>> list1 = Lists.newArrayList(objectMap2,objectMap3);
String list1Json = JSON.toJSONString(list1);
System.out.println(list1Json);
}
输出结果:
[{"浙江省会":"杭州","湖南省会":"长沙","江西省会":"南昌"},{"四川省会":"成都","江苏省会":"南京","安徽省会":"合肥"}]
Map<String, List<JavaBean>>
转 Json字符串
public static void main(String[] args) {
//Map<String, List<JavaBean>> 转 Json字符串
SmsSend smsSend4 = new SmsSend("18812345004", "SEND_SUCCESS");
SmsSend smsSend5 = new SmsSend("18812345005", "SEND_SUCCESS");
List<SmsSend> smsSendList2 = Lists.newArrayList(smsSend4, smsSend5);
SmsSend smsSend6 = new SmsSend("18812345006", "SEND_SUCCESS");
SmsSend smsSend7 = new SmsSend("18812345007", "SEND_SUCCESS");
List<SmsSend> smsSendList3 = Lists.newArrayList(smsSend6, smsSend7);
Map<String, List<SmsSend>> listMap = Maps.newHashMap();
listMap.put("smsSendList2",smsSendList2);
listMap.put("smsSendList3",smsSendList3);
String listMapJson = JSON.toJSONString(listMap);
System.out.println(listMapJson);
}
输出结果:
{"smsSendList3":[{"phone":"18812345006","status":"SEND_SUCCESS"},{"phone":"18812345007","status":"SEND_SUCCESS"}],"smsSendList2":[{"phone":"18812345004","status":"SEND_SUCCESS"},{"phone":"18812345005","status":"SEND_SUCCESS"}]}
Json字符串转各种对象
Json字符串 转 javaBean
Json字符串 转
List<JavaBean>
Json字符串 转
List<String>
Json字符串 转
List<Integer>
Json字符串 转
Map<String, JavaBean>
Json字符串 转
Map<String, String>
Json字符串 转
Map<String, Integer>
Json字符串 转
Map<String, Object>
Json字符串 转
List<Map\<String,Object>>
Json字符串 转
Map<String, List<JavaBean>>
Json字符串 转
List<Map\<String, JavaBean>>
Json字符串 转
List<Map<String, List<JavaBean>>>
Json字符串 转
Map<String, List<Map<String, JavaBean>>>
其他对象转Json字符串,都使用
JSON.toJSONString(JavaBean)
API实现即可
Json字符串 转 javaBean
public static void main(String[] args) {
//Json字符串 转 javaBean
String json1 = "{\"phone\":\"18812345001\",\"status\":\"SEND_SUCCESS\"}";
SmsSend smsSend = JSON.parseObject(json1, SmsSend.class);
System.out.println("phone:" + smsSend.getPhone());
System.out.println("status:" + smsSend.getStatus());
}
输出结果:
phone:18812345001
status:SEND_SUCCESS
Json字符串 转 List<JavaBean>
public static void main(String[] args) {
//Json字符串 转 List<JavaBean>
String json10 = "[{\"phone\":\"18812345002\",\"status\":\"SEND_SUCCESS\"},{\"phone\":\"18812345003\",\"status\":\"SEND_SUCCESS\"}]";
List<SmsSend> smsSendList10 = JSON.parseArray(json10, SmsSend.class);
for (SmsSend smsSend10 : smsSendList10) {
System.out.println("phone:" + smsSend10.getPhone());
System.out.println("status:" + smsSend10.getStatus());
}
}
输出结果:
phone:18812345002
status:SEND_SUCCESS
phone:18812345003
status:SEND_SUCCESS
Json字符串 转 List<String>
public static void main(String[] args) {
//Json字符串 转 List<String>
String json11 = "[\"北京\",\"上海\",\"深圳\",\"杭州\"]";
List<String> stringList11 = JSON.parseArray(json11, String.class);
for (String string11 : stringList11) {
System.out.println("string11: " + string11);
}
}
输出结果:
string11: 北京
string11: 上海
string11: 深圳
string11: 杭州
Json字符串 转 List<Integer>
public static void main(String[] args) {
//Json字符串 转 List<Integer>
String json12 = "[1,2,3,4]";
List<Integer> integerList12 = JSON.parseArray(json12, Integer.class);
for (Integer integer12 : integerList12) {
System.out.println("integer12: " + integer12);
}
}
输出结果:
integer12: 1
integer12: 2
integer12: 3
integer12: 4
Json字符串 转 Map<String, JavaBean>
public static void main(String[] args) {
//Json字符串 转 Map<String, JavaBean>
String json13 = "{\"smsSend1\":{\"phone\":\"18812345001\",\"status\":\"SEND_SUCCESS\"},\"smsSend2\":{\"phone\":\"18812345002\",\"status\":\"SEND_SUCCESS\"},\"smsSend3\":{\"phone\":\"18812345003\",\"status\":\"SEND_SUCCESS\"}}";
Map<String, SmsSend> map13 = JSON.parseObject(json13, Map.class);
for (String key : map13.keySet()) {
System.out.println("key: " + key + " , value: " + map13.get(key));
}
}
输出结果:
key: smsSend1 , value: {"phone":"18812345001","status":"SEND_SUCCESS"}
key: smsSend2 , value: {"phone":"18812345002","status":"SEND_SUCCESS"}
key: smsSend3 , value: {"phone":"18812345003","status":"SEND_SUCCESS"}
Json字符串 转 Map<String, String>
public static void main(String[] args) {
//Json字符串 转 Map<String, String>
String json14 = "{\"浙江省会\":\"杭州\",\"湖南省会\":\"长沙\",\"江西省会\":\"南昌\"}";
Map<String, String> map14 = JSON.parseObject(json14, Map.class);
for (String key : map14.keySet()) {
System.out.println("key: " + key + " , value: " + map14.get(key));
}
}
输出结果:
key: 浙江省会 , value: 杭州
key: 湖南省会 , value: 长沙
key: 江西省会 , value: 南昌
Json字符串 转 Map<String, Integer>
public static void main(String[] args) {
//Json字符串 转 Map<String, Integer>
String json15 = "{\"数学\":97,\"语文\":90,\"英语\":95}";
Map<String, Integer> map15 = JSON.parseObject(json15, Map.class);
for (String key : map15.keySet()) {
System.out.println("key: " + key + " , value: " + map15.get(key));
}
}
输出结果:
key: 数学 , value: 97
key: 语文 , value: 90
key: 英语 , value: 95
Json字符串 转 Map<String, Object>
public static void main(String[] args) {
//Json字符串 转 Map<String, Object>
String json16 = "{\"浙江省会\":\"杭州\",\"湖南省会\":\"长沙\",\"江西省会\":\"南昌\"}";
Map<String, Object> map16 = JSON.parseObject(json16, Map.class);
for (String key : map16.keySet()) {
System.out.println("key: " + key + " , value: " + map16.get(key));
}
}
输出结果:
key: 浙江省会 , value: 杭州
key: 湖南省会 , value: 长沙
key: 江西省会 , value: 南昌
Json字符串 转 List<Map<String,Object>>
public static void main(String[] args) {
//Json字符串 转 List<Map<String,Object>>
String json17 = "[{\"浙江省会\":\"杭州\",\"湖南省会\":\"长沙\",\"江西省会\":\"南昌\"},{\"四川省会\":\"成都\",\"江苏省会\":\"南京\",\"安徽省会\":\"合肥\"}]";
List<Map<String, Object>> list17 = JSON.parseObject(json17, new TypeReference<List<Map<String, Object>>>() {
});
for (Map<String, Object> map17 : list17) {
for (String key : map17.keySet()) {
System.out.println("key: " + key + " , value: " + map17.get(key));
}
}
}
输出结果:
key: 浙江省会 , value: 杭州
key: 湖南省会 , value: 长沙
key: 江西省会 , value: 南昌
key: 四川省会 , value: 成都
key: 江苏省会 , value: 南京
key: 安徽省会 , value: 合肥
Json字符串 转 Map<String, List<JavaBean>>
public static void main(String[] args) {
//Json字符串 转 Map<String, List<JavaBean>>
String json18 = "{\"smsSendList3\":[{\"phone\":\"18812345006\",\"status\":\"SEND_SUCCESS\"},{\"phone\":\"18812345007\",\"status\":\"SEND_SUCCESS\"}],\"smsSendList2\":[{\"phone\":\"18812345004\",\"status\":\"SEND_SUCCESS\"},{\"phone\":\"18812345005\",\"status\":\"SEND_SUCCESS\"}]}";
Map<String, List<SmsSend>> map18 = JSON.parseObject(json18, new TypeReference<Map<String, List<SmsSend>>>() {
});
for (String key : map18.keySet()) {
for (SmsSend smsSend18 : map18.get(key)) {
System.out.println("key: " + key + " , value { " + "phone:" + smsSend18.getPhone() + " status:" + smsSend18.getStatus()+" }");
}
}
}
输出结果:
key: smsSendList3 , value { phone:18812345006 status:SEND_SUCCESS }
key: smsSendList3 , value { phone:18812345007 status:SEND_SUCCESS }
key: smsSendList2 , value { phone:18812345004 status:SEND_SUCCESS }
key: smsSendList2 , value { phone:18812345005 status:SEND_SUCCESS }
Json字符串 转 List<Map<String, JavaBean>>
public static void main(String[] args) {
//Json字符串 转 List<Map<String, JavaBean>>
String json22 = "[{\"smsSend20\":{\"phone\":\"18812345020\",\"status\":\"SEND_SUCCESS\"},\"smsSend19\":{\"phone\":\"18812345019\",\"status\":\"SEND_SUCCESS\"}},{\"smsSend22\":{\"phone\":\"18812345022\",\"status\":\"SEND_SUCCESS\"},\"smsSend21\":{\"phone\":\"18812345021\",\"status\":\"SEND_SUCCESS\"}}]";
List<Map<String, SmsSend>> list22 = JSON.parseObject(json22, new TypeReference<List<Map<String, SmsSend>>>() {
});
for (Map<String, SmsSend> map22 : list22) {
for (String key : map22.keySet()) {
System.out.println("key: " + key + " , value { " + "phone:" + map22.get(key).getPhone() + " status:" + map22.get(key).getStatus() + " }");
}
}
}
输出结果:
key: smsSend20 , value { phone:18812345020 status:SEND_SUCCESS }
key: smsSend19 , value { phone:18812345019 status:SEND_SUCCESS }
key: smsSend22 , value { phone:18812345022 status:SEND_SUCCESS }
key: smsSend21 , value { phone:18812345021 status:SEND_SUCCESS }
Json字符串 转 List<Map<String, List<JavaBean>>>
public static void main(String[] args) {
//Json字符串 转 List<Map<String, List<JavaBean>>>
String json25="[{\"smsSend23\":[{\"phone\":\"18812345023\",\"status\":\"SEND_SUCCESS\"},{\"phone\":\"18812345024\",\"status\":\"SEND_SUCCESS\"}]},{\"smsSend24\":[{\"phone\":\"18812345025\",\"status\":\"SEND_SUCCESS\"},{\"phone\":\"18812345026\",\"status\":\"SEND_SUCCESS\"}]}]";
List<Map<String, List<SmsSend>>> smsSendList28 = JSON.parseObject(json25, new TypeReference<List<Map<String, List<SmsSend>>>>() {
});
for (Map<String, List<SmsSend>> map28 : smsSendList28) {
for (String key : map28.keySet()) {
for (SmsSend smsSend28 : map28.get(key)) {
System.out.println("key: " + key + " , value { " + "phone:" + smsSend28.getPhone() + " status:" + smsSend28.getStatus() + " }");
}
}
}
}
输出结果:
key: smsSend23 , value { phone:18812345023 status:SEND_SUCCESS }
key: smsSend23 , value { phone:18812345024 status:SEND_SUCCESS }
key: smsSend24 , value { phone:18812345025 status:SEND_SUCCESS }
key: smsSend24 , value { phone:18812345026 status:SEND_SUCCESS }
总结
FastJson是非常不错的解析Json的框架,大家可以通过上面的示例对其有个大致的了解,更深入的使用需要根据实际情况来探索,笔者目前还未应用到。
这里再补充几个可能会用到的场景:
- 集合对象转Json对象 如Map转Json对象
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(map);
- 集合对象转Json数组 如List转Json数组
JSONArray jsonArray = (JSONArray) JSONArray.toJSON(excepedList);