zoukankan      html  css  js  c++  java
  • 解析json对象出现$ref: "$.list[0]"的解决办法

    http://blog.csdn.net/u013185616/article/details/52799166
    [{"endsyntime":"2017-11-15 16:31:29","id":2,"intervaltime":"指定日期执行一次","sourcecount":15,"sourcedbid":6,"sourcetable":"test2","startsyntime":"2017-11-15 16:44:52","starttime":"2017-11-15 10:10:10","targettable":"test2"},{"$ref":"$[0]"},{"$ref":"$[0]"}]
    我的原因是;添加数据时,new对象时,在循环外new的,list添加数据的时候,每次都add这一个obj.
        JsonSynModel synm = new JsonSynModel(); //错误的原由,循环添加同一个obj
            for (synmodel s : list) {
                synm = new JsonSynModel();
                synm.setId(s.getId());
                synm.setWeek(week);
                synm.setComment(s.getComment());
                reList.add(synm);
            }
        return JSON.toJSONString(reList);
    
    原因 : (多表查询,死循环)
    循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。引用是通过$ref标示的,下面介绍一些引用的描述
    "$ref":".." 上一级
    "$ref":"@" 当前对象,也就是自引用
    "$ref":"$" 根对象
    "$ref":"$.children.0" 基于路径的引用,相当于 root.getChildren().get(0)
    (解除引用;ssh一对多,多对多维护一端关系,防止多表关联查询出现死循环)
    解决办法 : 采用禁止循环引用的方案.
    return JSON.toJSONString(reList,SerializerFeature.DisableCircularReferenceDetect);
    其中:SerializerFeature.DisableCircularReferenceDetect就是禁止循环引用的方案,我们可以通过枚举类SerializerFeature来查看到底有多少种方式:
    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;
        }
    }
    ​
  • 相关阅读:
    web应用后台开发的故事
    XML的定义、用途、以及它的发展前景和存在的问题等等
    本学期(大三下学期)学习目标
    企业级应用与互联网应用的区别?
    新能源汽车无线充电管理网站4
    新能源汽车无线充电管理网站3
    新能源汽车无线充电管理网站2
    企业级应用与互联网应用的区别
    javaee 新学期新目标
    团队项目PCP--自我评价
  • 原文地址:https://www.cnblogs.com/luckyyi/p/7999175.html
Copyright © 2011-2022 走看看