JSON转义的问题

1.序列化循环引用的问题

 (1)一般情况下,是被序列化对象中,有多处引用了同一个数据,类似于下面这种:

"receiver": {
   "$ref": "$[0].buyer"
},

或者在传到前端的时候,会有类似的情况:

"$ref":"$.map.monthFinishRed[5]"

就是receiver引用buyer字段的内容,此时的JSON对象保存的receiver是指向buyer的引用,这种情况在JSON.parseObject会出错,所以在得到json字符串的时候,要加上一个禁止循环引用的标记:

String result=JSON.toJSONString(jsonObject, SerializerFeature.DisableCircularReferenceDetect);

2.序列化添加类名的问题

(1)在某些场景,我们需要在序列化对象的时候,把类名也加上,因为调用的接口需要通过类名进行对应的解析,这时候只需要加上WriteClassName属性即可:

String str=JSON.toJSONString(res,SerializerFeature.WriteClassName);

然后json字符串会有type属性,存储对应的类型名称。此时可以手动把type属性改为需要的名称。

3.序列化值为null的情况

(1)如果待序列化的对象中有的字段值为null,默认情况下,序列化的时候会抛弃这个字段,想要带上这种字段,需要加上属性,

String str=JSON.toJSONString(res,SerializerFeature.WriteMapNullValue);

4.其他常用情况

(1)QuoteFieldNames,//输出key时是否使用双引号,默认为true

(2)UseSingleQuotes,//使用单引号而不是双引号,默认为false

(3)WriteEnumUsingToString,//Enum输出name()或者original,默认为false

(4)UseISO8601DateFormat,//Date使用ISO8601格式输出,默认为false

(5)WriteNullListAsEmpty,//List字段如果为null,输出为[],而非null

(6)WriteNullStringAsEmpty,//字符类型字段如果为null,输出为"",而非null

(7)WriteNullNumberAsZero,//数值字段如果为null,输出为0,而非null

(8)WriteNullBooleanAsFalse,//Boolean字段如果为null,输出为false,而非null

(9)SkipTransientField,//如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true

(10)SortField,//按字段名称排序后输出。默认为false

(11)WriteTabAsSpecial,//把\t做转义输出,默认为false

(12)PrettyFormat,//结果是否格式化,默认为false

(13)WriteSlashAsSpecial,//对斜杠'/'进行转义

(14)BrowserCompatible,//将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false

(15)WriteDateUseDateFormat,//全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);

(16)NotWriteRootClassName,//不打印最外层根对象的类名,例如一个DO里面引入了另一个DO,外层DO不会打印类名。

(17)DisableCheckSpecialChar,//一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false

(18)BeanToArray // 把Bean转换成数组

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值