编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

gson确实比fastjson要好用很多,捞的我淌口水,很烦

wxchong 2024-06-13 03:22:59 开源技术 19 ℃ 0 评论

之前一直使用的是fastjson,但是对性能上没什么要求,反而对功能的完善性有很高的要求,特别是在java和python的对象转换上有各种莫名的要求,导致掉坑里面去了。我一直以为是我用的不对,使用gson替换实现相同功能后,觉得捞的淌口水。需要认同的是,Gson是目前功能很全的Json解析神器。


一波基础知识:

gson

bean转json:

Gson gson = new Gson();
String json = gson.toJson(obj);

json转bean:

Gson gson = new Gson();
String json = "{\"id\":\"1\",\"name\":\"peabody\"}";
Man man= gson.fromJson(json, Man.class);

json转换复杂的bean:

Gson gson = new Gson();
String json = "[{\"id\":\"1\",\"name\":\"peabody\"},{\"id\":\"2\",\"name\":\"peapeay\"}]";
// 将json转换成List
List list = gson.fromJson(json, new TypeToken<List>() {}.getType());
// 将json转换成Set
Set set = gson.fromJson(json, new TypeToken<Set>() {}.getType());

Fastjson

bean转json

// 将对象转换成格式化的json
JSON.toJSONString(obj, true);
// 将对象转换成非格式化的json
JSON.toJSONString(obj, false);

json转bean:

String json = "{\"id\":\"1\",\"name\":\"peabody\"}";
Man man
 = JSON.parseObject(json, Man.class);

json转复杂的bean:

String json = "[{\"id\":\"1\",\"name\":\"peabody\"},{\"id\":\"2\",\"name\":\"peapeay\"}]";
// 将json转换成List
List list = JSON.parseObject(json, new TypeReference<ARRAYLIST>(){});
// 将json转换成Set
Set set = JSON.parseObject(json, new TypeReference<HASHSET>(){});


从上面的使用中,看似差不多,但是我在使用python解析和转换对象和字符串时发现:

"[\"{\\n \\\"status\\\": true, \\n \\\"name\\\": \\\"peabody\\\", \\n \\\"age\\\": \\\"18\\\", \\n \\\"handsome\\\": \\\"YES\\\"\\n}\\n\"]"

只要python转换一次就会多一个反斜杠,比如我这里的这个实体在python中转换使用了三次才回传给java服务端,结果就是一堆的反斜杠。

然后fastjson就各种无法解析,且无法正确有效判断字符串是否为json的格式

最后用gson做了json的格式判断和对象转换

JSONObject testObject = JSONObject.parseObject(testResult);
#使用gson进行格式判断
if(GsonUtils.isJSON(testObject.toString())){
	Gson gson=new Gson();
	java.lang.reflect.Type listType = new TypeToken<List<Man>>() {}.getType();
	#将格式进行转化为实体类List
	String json = gson.toJson(testObject, listType);
	List<Man> manList= gson.fromJson(json,listType);
}

上面的字符串还就那个解析陈昆~为List<Man>


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表