JSONObject toJSONString错误的解决
⽬录
JSONObjecttoJSONString错误
1.alibaba.fastjson.JSONObject继承了JSON
2.在使⽤时需要注意的地⽅
3.默认过滤掉值为null的key
不需要判断使⽤StringUtils.isBlank进⾏判断
JSONObject toJSONString错误
1.alibaba.fastjson.JSONObject 继承了JSON
可以使⽤其2个重要的⽅法:
Model model = new Model();
String json = JSONString(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);然后通过 String("key");等基本⽅法获取key对于的value.
2.在使⽤时需要注意的地⽅
并⾮所有的对象,都能通过JSONString(model) 转换成功。
例如:在接⼊阿⾥语⾳验证码时,对SingleCallByTtsRequest请求对象使⽤以上⽅法时,就会转换报错。SingleCallByTtsRequest extends RpcAcsRequest<SingleCallByTtsResponse>
RpcAcsRequest<T extends AcsResponse> extends AcsRequest<T>
fastjson忽略属性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的属性。JSONString的⼀个坑
这样会导致⼀个结果就是StringUtils.isBlank判断后,会为false
因为⾼德返回的这个数据结构是个key-value结构,除了null,就是⼀个带有”{}“的⼀个字符串。
不需要判断使⽤StringUtils.isBlank进⾏判断
public class JSONUtils {
public static String toJSONString(Object o) {
JSONWriter writer = new JSONWriter();
writer.writeObject(o);
String();
}
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;
}
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。