pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
1)fastjson基本封装和使用案例
JsonService.java(包装json)
package org.example.json;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
public class JsonService {
/**
* 通过传入的key value构建json
*/
public static JSONObject buildJSON(Object... objs) {
JSONObject dataObj = new JSONObject();
if (objs.length % 2 != 0) {
System.err.println("参数错误");
return dataObj;
}
for (int i = 0; i < objs.length; i += 2) {
Object key = objs[i];
Object value = objs[i + 1];
dataObj.put((String) key, value);
}
return dataObj;
}
/**
* 返回给客户端的JSON
*/
public static String toClientString(Object obj) {
return JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);
}
}
ResponseService.java(构建返回值)
package org.example.json;
import com.alibaba.fastjson.JSONObject;
public class ResponseService {
public static <T> JSONObject buildResponse(int code, T data) {
return JsonService.buildJSON("code", code, "data", data);
}
}
Role.java(model数据层)
package org.example.json;
public class Role {
private int rid;
private String name;
public Role(int rid, String name) {
this.rid = rid;
this.name = name;
}
public int getRid() {
return rid;
}
public void setRid(int rid) {
this.rid = rid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Main.java(使用)
package org.example.json;
import com.alibaba.fastjson.JSONObject;
public class Main {
public static void main(String[] args) {
JSONObject jo = ResponseService.buildResponse(-1, null);
System.out.println(jo);
JSONObject jo1 = ResponseService.buildResponse(200, new Role(100,"jn"));
System.out.println(jo1);
}
}
/*
{"code":-1}
{"code":200,"data":{"name":"jn","rid":100}}
*/
这样子,可以包装任何类型的数据返回给客户端了
2)用snappy对json进行压缩
pom.xml
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.1.8.4</version>
</dependency>
SnappyService.java
package org.example.compress;
import org.xerial.snappy.Snappy;
import java.io.IOException;
public class SnappyService {
public static byte[] compress(String str) {
try {
return Snappy.compress(str);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static String uncompress(byte[] bytes) {
try {
return Snappy.uncompressString(bytes);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
Main.java
package org.example.compress;
import com.alibaba.fastjson.JSONObject;
import org.example.json.JsonService;
import org.example.json.Role;
public class Main {
public static void main(String[] args) {
JSONObject jo = JsonService.buildJSON("a", 1, "role", new Role(1, "jianan"), "role1", new Role(1, "jianan"), "role2", new Role(1, "jianan"), "role3", new Role(1, "jianan"));
String str = jo.toString();
System.out.println("压缩前长度=" + str.getBytes().length);
byte[] compress = SnappyService.compress(str);
System.out.println("压缩后长度=" + compress.length);
System.out.println("压缩后内容=" + new String(compress));
String strNew = SnappyService.uncompress(compress);
System.out.println("压缩解后长度=" + strNew.getBytes().length);
System.out.println(strNew);
}
}
/*
压缩前长度=142
压缩后长度=61
压缩后内容=��{"a":1,"role1":{"name":"jianan","rid":1},"�! 2�" 3j" }
压缩解后长度=142
{"a":1,"role1":{"name":"jianan","rid":1},"role":{"name":"jianan","rid":1},"role2":{"name":"jianan","rid":1},"role3":{"name":"jianan","rid":1}}
*/
可以看出,有重复数据的,还是能起到比较大的压缩作用的
==========
List和json转换
public static void list2Json(){
// List序列化
List<String> list = new ArrayList<String>();
list.add("北京");
list.add("上海");
list.add("广州");
list.add("深圳");
// step1: list转json
String json = JSON.toJSONString(list);
System.out.println("序列化 List to JSON -> ");
System.out.println(json);
// step2:List反序列化
list = (List)JSON.parseObject(json,List.class);
System.out.println("反序列化 List内容 -> ");
System.out.println(list);
}