之前一直使用的是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转换成ListList list = gson.fromJson(json, new TypeToken() {}.getType());// 将json转换成SetSet set = gson.fromJson(json, new TypeToken() {}.getType());
Fastjson
bean转json
// 将对象转换成格式化的jsonJSON.toJSONString(obj, true);// 将对象转换成非格式化的jsonJSON.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转换成ListList list = JSON.parseObject(json, new TypeReference(){});// 将json转换成SetSet set = JSON.parseObject(json, new TypeReference(){});
从上面的使用中,看似差不多,但是我在使用python解析和转换对象和字符串时发现:
"["{ "status": true, "name": "peabody", "age": "18", "handsome": "YES"}"]"
只要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>() {}.getType();#将格式进行转化为实体类ListString json = gson.toJson(testObject, listType);List manList= gson.fromJson(json,listType);}
上面的字符串还就那个解析陈昆~为List