之前一直使用的是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>
本文暂时没有评论,来添加一个吧(●'◡'●)