$ref':'$[0].coupon.merchants[0]' ,数据引用问题
来源:互联网 发布:高要网络问政平台 编辑:程序博客网 时间:2024/05/19 13:08
问题描述:
今天在做后台传数据到前端解析的时候遇到了这个问题。背景介绍下:后台传过去json数据是用阿里的fastjson转换的,调用的是这个方法其中dataformat是格式化时间数据的。传过去的是一个PageBean对象,该对象继承了Page对象,Page里面包含list,pageNo,pageSize。前台在通过data.list准备取出list循环做点事情的时候,发现全是undefined,通过console.log(data.list),发现这个数据竟然是这个东西$ref: "$.list[0]"。百度搜了下,这里就是循环引用造成的。
- String s = JSON.toJSONStringWithDateFormat(o,dateformat,SerializerFeature.WriteDateUseDateFormat);
- ServletActionContext.getResponse().getWriter().write(s);
问题分析:
循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。引用是通过$ref标示的,下面介绍一些引用的描述
- "$ref":".." 上一级
- "$ref":"@" 当前对象,也就是自引用
- "$ref":"$" 根对象
- "$ref":"$.children.0" 基于路径的引用,相当于 root.getChildren().get(0)
解决方案:
fastjson提供了多种json转换方案,有兴趣的同学可以自己看看源码,这里我们可以采用禁止循环引用的方案:
- String s = JSON.toJSONStringWithDateFormat(0,"yyyy-MM-dd HH:mm:ss",SerializerFeature.DisableCircularReferenceDetect);
- public enum SerializerFeature {
- QuoteFieldNames,
- UseSingleQuotes,
- WriteMapNullValue,
- WriteEnumUsingToString,
- UseISO8601DateFormat,
- /**
- * @since 1.1
- */
- WriteNullListAsEmpty,
- /**
- * @since 1.1
- */
- WriteNullStringAsEmpty,
- /**
- * @since 1.1
- */
- WriteNullNumberAsZero,
- /**
- * @since 1.1
- */
- WriteNullBooleanAsFalse,
- /**
- * @since 1.1
- */
- SkipTransientField,
- /**
- * @since 1.1
- */
- SortField,
- /**
- * @since 1.1.1
- */
- @Deprecated
- WriteTabAsSpecial,
- /**
- * @since 1.1.2
- */
- PrettyFormat,
- /**
- * @since 1.1.2
- */
- WriteClassName,
- /**
- * @since 1.1.6
- */
- DisableCircularReferenceDetect,
- /**
- * @since 1.1.9
- */
- WriteSlashAsSpecial,
- /**
- * @since 1.1.10
- */
- BrowserCompatible,
- /**
- * @since 1.1.14
- */
- WriteDateUseDateFormat,
- /**
- * @since 1.1.15
- */
- NotWriteRootClassName,
- /**
- * @since 1.1.19
- */
- DisableCheckSpecialChar,
- /**
- * @since 1.1.35
- */
- BeanToArray
- ;
- private SerializerFeature(){
- mask = (1 << ordinal());
- }
- private final int mask;
- public final int getMask() {
- return mask;
- }
- public static boolean isEnabled(int features, SerializerFeature feature) {
- return (features & feature.getMask()) != 0;
- }
- public static int config(int features, SerializerFeature feature, boolean state) {
- if (state) {
- features |= feature.getMask();
- } else {
- features &= ~feature.getMask();
- }
- return features;
- }
- }
阅读全文
0 0
- $ref':'$[0].coupon.merchants[0]' ,数据引用问题
- 循环引用检查{"$ref":"$.data[0]"}
- HDU Proud Merchants 【需要排序的0/1背包问题】
- json数据避免$ref 循环引用
- hdu3466-Proud Merchants 0-1背包
- hdu 3466 Proud Merchants(0/1背包)
- hdu3466 Proud Merchants 0-1背包变形
- HDOJ 3466 Proud Merchants 【0 1背包】
- [转载]LaTeX中\ref{}引用标号不正确的问题
- 【FastJSON】解决FastJson中“$ref 循环引用”的问题
- 【FastJSON】解决FastJson中“$ref 循环引用”的问题
- 解决FastJson中“$ref 循环引用”的问题
- 解决FastJson的$ref循环引用检测的问题
- cocos2dx3.0 Ref
- cocos2dx3.0 Ref
- Ref与引用类型
- ref传递引用类型
- C# 引用ref/out
- 9.3 函数 :任意进制输出[递归]
- 10.3 指针和数组
- 10.3 指针
- 10.7 指针 :指针和多维数组
- 10.13-2 数组拷贝
- $ref':'$[0].coupon.merchants[0]' ,数据引用问题
- 调用pcl计算法向量,并将法向量可视化
- 10.13-3 指针与一维数组相关运算
- (1)JVM运行时数据分区
- 10.13-7 指针与二维数组copy
- 11.1 字符串和指针
- jquery 点击元素实现背景色改变,点击元素以外任意地方还原该元素背景色
- 11.2 字符串和字符串函数:fgets()函数
- 11.3 字符串输出 puts()