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; } }