旅游类网站设计模板下载,专业网站制作公司排行,工作手机,建网站买的是什么原因#xff1a;JSON在处理数据时出现了相同数据#xff0c;JSON自动将相同节点的数据使用引用方式代替。 解决方式#xff1a; String jsonString JSON.toJSONString(params, SerializerFeature.DisableCircularReferenceDetect); SerializerFeature.DisableCircularRefer…原因JSON在处理数据时出现了相同数据JSON自动将相同节点的数据使用引用方式代替。 解决方式 String jsonString JSON.toJSONString(params, SerializerFeature.DisableCircularReferenceDetect); SerializerFeature.DisableCircularReferenceDetect消除对同一对象循环引用的问题 扩展 名称含义QuoteFieldNames输出key时是否使用双引号,默认为trueUseSingleQuotes使用单引号而不是双引号,默认为falseWriteMapNullValue是否输出值为null的字段,默认为falseWriteEnumUsingToString Enum输出name()或者original,默认为false 1、目前版本的fastjon默认对enum对象使用WriteEnumUsingName属性因此会将enum值序列化为其Name。 2、使用WriteEnumUsingToString方法可以序列化时将Enum转换为toString()的返回值同时override toString函数能够将enum值输出需要的形式。但是这样做会带来一个问题对应的反序列化使用的Enum的静态方法valueof可能无法识别自行生成的toString()导致反序列化出错。 3、如果将节省enum序列化后的大小可以将enum序列化其ordinal值保存为int类型。fastJson在反序列化时如果值为int则能够使用ordinal值匹配找到合适的对象。 fastjson要将enum序列化为ordinal只需要禁止WriteEnumUsingName feature。 首先根据默认的features排除WriteEnumUsingName,然后使用新的features序列化即可。 int featuresSerializerFeature.config(JSON.DEFAULT_GENERATE_FEATURE, SerializerFeature.WriteEnumUsingName, false) JSON.toJSONString(obj,features,SerializerFeature.EMPTY); UseISO8601DateFormatDate使用ISO8601格式输出默认为falseWriteNullListAsEmptyList字段如果为null,输出为[],而非nullWriteNullStringAsEmpty字符类型字段如果为null,输出为”“,而非nullWriteNullNumberAsZero数值字段如果为null,输出为0,而非nullWriteNullBooleanAsFalseBoolean字段如果为null,输出为false,而非nullSkipTransientField如果是true类中的Get方法对应的Field是transient序列化时将会被忽略。 默认为trueSortField按字段名称排序后输出。默认为falseWriteTabAsSpecial把\t做转义输出默认为falsePrettyFormat结果是否格式化,默认为falseWriteClassName序列化时写入类型信息默认为false。反序列化是需用到DisableCircularReferenceDetect 消除对同一对象循环引用的问题默认为false 当进行toJSONString的时候默认如果重用对象的话会使用引用的方式进行引用对象。 [ { $ref: $.itemSkuList[0].itemSpecificationList[0] }, { $ref: $.itemSkuList[1].itemSpecificationList[0] } ] 循环引用 很多场景中我们需要序列化的对象中存在循环引用在许多的json库中这会导致stackoverflow。在功能强大的fastjson中你不需要担心这个问题。例如 A a new A(); B b new B(a); a.setB(b); String text JSON.toJSONString(a); //{b:{a:{$ref:..}}} A a1 JSON.parseObject(text, A.class); Assert.assertTrue(a1 a1.getB().getA()); 引用是通过$ref来表示的 引用描述 $ref:.. 上一级$ref: 当前对象也就是自引用$ref:$ 根对象$ref:$.children.0 基于路径的引用相当于 root.getChildren().get(0)WriteSlashAsSpecial对斜杠’/’进行转义BrowserCompatible将中文都会序列化为\uXXXX格式字节数会多一些但是能兼容IE 6默认为falseWriteDateUseDateFormat全局修改日期格式,默认为false。 JSON.DEFFAULT_DATE_FORMAT “yyyy-MM-dd”; JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);DisableCheckSpecialChar一个对象的字符串属性中如果有特殊字符如双引号将会在转成json时带有反斜杠转移符。如果不需要转义可以使用这个属性。默认为falseNotWriteRootClassName含义BeanToArray将对象转为array输出