在使用fastjson进行转换时,发现有一些问题,现整理如下:
maven:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
java:
import com.alibaba.fastjson.JSON;
public class JsonUtil {
public static String obj2Json(Object object){
return JSON.toJSONString(object);
}
public static Object json2Entity(String strJson,Class beanClass){
return JSON.parseObject(strJson, beanClass);
}
}
问题1:
private String AGE; 转换后为 {"aGE":""}
解决方案:
1>
项目初始化或者执行转换前先执行:
TypeUtils.compatibleWithJavaBean =true;
2>
import com.alibaba.fastjson.annotation.JSONField;
getter方法添加:
@JSONField(name="RESP_CODE")
public String getRESP_CODE() {
return RESP_CODE;
}
问题2:
map里面如存Date类型,转换后为一串数字
解决方法:
转换时: JSON.toJSONStringWithDateFormat(object, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteDateUseDateFormat);
ps: 此种无法对yyyy-MM-dd和包含时分秒的同时做处理.
自己写的一个转换工具类:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import net.sf.json.JSONArray;
public class TransUtil {
/**
* 将object转为json格式
*/
public static String obj2Json(Object object){
return JSON.toJSONString(object);
}
public static String obj2JsonFmDate(Object object) {
return JSON.toJSONStringWithDateFormat(object, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteDateUseDateFormat).replaceAll(" 00:00:00", "");
}
/**
* 将json转为实体类
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static Object json2Entity(String strJson,Class beanClass){
return JSON.parseObject(strJson, beanClass);
}
/**
* 将json转为List
*/
public static Object json2ObjectList(String strJson, @SuppressWarnings("rawtypes") Class beanClass) {
return JSONArray.toCollection(JSONArray.fromObject(strJson), beanClass);
}
/**
* json转为jsonobject
*/
public static JSONObject jsonToJsonObj(String json){
JSONObject jsonObject = JSONObject.parseObject(json);
return jsonObject;
}
/**
* jsonobject转为json
*/
public static String jsonObjToJson(JSONObject jsonObject){
return jsonObject.toJSONString();
}
}