记FastJson踩坑

FastJson是阿里巴巴旗下团队开发的高性能Json框架,简单易用,功能强大,但若是有一些细节使用不当,是很容易踩雷的。在此分享一下鄙人开发过程中遇到的两处坑。

坑一 字段顺序默认排序

与某家银行做调试的时候,Json文本作为摘要,要对它做签名。多次调试验签失败,原因是,签名的摘要和验签的摘要,经过传输和解析,字段顺序发生变化,导致签名和验签的摘要不一致从而验签失败,解决方案:

  1. 创建json对象时,构造参数为true,它的意思是固定顺序,不做自动排序。
JSONObject json = new JSONObject(true);
json.put......

这样在执行下面代码时,不会自动排序,而是严格按照插入顺序排序。

String jsonString = json.toJSONString();
  1. 字符串解析为json对象时,添加参数Feature.OrderedField,它也是固定顺序的作用。
String jsonString2 = "xxxxxx";
JSONObject json2 = JSON.parseObject(jsonString2,Feature.OrderedField);
......

这样,解析到的json对象和json字符串中的顺序是完全一致的。

坑二 转义字符

直接上代码

JSONObject json = new JSONObject(true);

JSONObject obj = new JSONObject();
obj.put("name","zhangsan");

json.put("obj_1",obj);//**直接对象赋值
json.put("obj_2",JSON.toJSONString(obj));//转化为json字符串后赋值
System.out.println(json);

运行结果:

{"obj_1":{"name":"zhangsan"},"obj_2":"{\"name"\":\"zhangsan\"}"}

注意obj_2的值引号和转义字符\


记录成长,热爱生活!

你可能感兴趣的:(java)