JSONObject toJSONString错误的解决
作者:陌下微尘
这篇文章主要介绍了JSONObject toJSONString错误的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
JSONObject toJSONString错误
1.com.alibaba.fastjson.JSONObject 继承了JSON
可以使用其2个重要的方法:
Model model = new Model(); String json = JSONObject.toJSONString(model); // serializes model to Json Model model2 = JSONObject.parseObject(json, Model.class); // deserializes json into model2
即可以将json字符串转为json对象,如果该json对象的内容是可预期的对象类型,那么可以通过Model model2 = JSONObject.parseObject(json, Model.class); 取得预期的对象;
如果是不可预期的json字符串时,但有固定的key,则可通过JSONObject jsonObject = JSONObject.parseObject(jsonStr);
然后通过 jsonObject.getString("key");等基本方法获取key对于的value.
2.在使用时需要注意的地方
并非所有的对象,都能通过JSONObject.toJSONString(model) 转换成功。
例如:在接入阿里语音验证码时,对SingleCallByTtsRequest请求对象使用以上方法时,就会转换报错。
SingleCallByTtsRequest extends RpcAcsRequest<SingleCallByTtsResponse> RpcAcsRequest<T extends AcsResponse> extends AcsRequest<T> SingleCallByTtsResponse extends AcsResponse
他们的继承关系如上,这里并未对错误原因进行深入分析,猜测是因为其中有相互引用导致解析转换失败。
3.默认过滤掉值为null的key
public static String toJSONString(Object object)
该方法将实体对象转换成Json字符串时默认忽略值为null的属性。
public static String toJSONString(Object object, SerializerFeature… features)
该方法将实体对象转换成Json字符串时,如果不传递参数SerializerFeature.WriteMapNullValue,则忽略值为null的属性。
JSONUtils.toJSONString的一个坑
JSONUtils.toJSONString(null); //返回一个为"null"的字符串
这样会导致一个结果就是StringUtils.isBlank判断后,会为false
因为高德返回的这个数据结构是个key-value结构,除了null,就是一个带有”{}“的一个字符串。
不需要判断使用StringUtils.isBlank进行判断
public class JSONUtils { public static String toJSONString(Object o) { JSONWriter writer = new JSONWriter(); writer.writeObject(o); return writer.toString(); } public static Object parse(String text) { JSONParser parser = new JSONParser(text); return parser.parse(); } } public void writeNull() { write("null"); } @SuppressWarnings({ "unchecked", "rawtypes" }) public void writeObject(Object o) { if (o == null) { writeNull(); return; }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- String转JSONObject的两种方式
- Java中如何将String转JSONObject
- 关于JSONObject.toJSONString出现地址引用问题
- 利用JSONObject.toJSONString()包含或排除指定的属性
- 使用JSONObject.toJSONString 过滤掉值为空的key
- 解决JSONObject.toJSONString()输出null的问题
- Java使用fastjson对String、JSONObject、JSONArray相互转换
- 详解Java中String JSONObject JSONArray List<实体类>转换
- 解决String字符串转JSONObject顺序不对的问题