记录一下:一个由fastjson2 JSONObject.toJSONString 中挖的坑
·
昨天改了优化了一下代码添加了一下缓存:
String userJSONString = JSONObject.toJSONString(redisService.get(redisKey))。
xxxEntity = JSON.parseObject(userJSONString, XXXEntity.class);//结果对象序列话后 为空,其原因就是在 SONObject.toJSONString 是将NULL 直接变成了字符串“null”
我们来看一下它的底层是如何实现的
public static String toJSONString(Object object) {
JSONWriter.Context context = createWriteContext(SerializeConfig.global, DEFAULT_GENERATE_FEATURE);
try (JSONWriter writer = JSONWriter.of(context)) {
//当我们对象为空的时候,它会将我们对象为 null 转化为 字符串“null”
if (object == null) {
writer.writeNull(); //关键在这
} else {
writer.setRootObject(object);
Class<?> valueClass = object.getClass();
ObjectWriter objectWriter = context.getObjectWriter(valueClass, valueClass);
objectWriter.write(writer, object, null, null, 0);
}
return writer.toString();
} catch (com.alibaba.fastjson2.JSONException ex) {
Throwable cause = ex.getCause() != null ? ex.getCause() : ex;
throw new JSONException(ex.getMessage(), cause);
} catch (RuntimeException ex) {
throw new JSONException("toJSONString error", ex);
}
}
我们再看看:writeNull()
public void writeNull() {
writeRaw("null");
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)