问题描述:
今天在做后台传数据到前端解析的时候遇到了这个问题。背景介绍下:后台传过去json数据是用阿里的fastjson转换的,调用的是这个方法

String s = JSON.toJSONStringWithDateFormat(o,dateformat,SerializerFeature.WriteDateUseDateFormat);
ServletActionContext.getResponse().getWriter().write(s);

其中dataformat是格式化时间数据的。传过去的是一个PageBean对象,该对象继承了Page对象,Page里面包含list,pageNo,pageSize。前台在通过data.list准备取出list循环做点事情的时候,发现全是undefined,通过console.log(data.list),发现这个数据竟然是这个东西ref:"ref: "ref:".list[0]"。百度搜了下,这里就是循环引用造成的。
问题分析:

循环引用:当一个对象包含另一个对象时,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);

其中: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*/@DeprecatedWriteTabAsSpecial,/*** @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;}
}

转自:https://blog.csdn.net/u013185616/article/details/52799166

JAVA-map转换json异常相关推荐

  1. gson转对象变成null_FastJson、Jackson、Gson进行Java对象转换Json的细节处理

    转 https://blog.csdn.net/moneyshi/article/details/51830329 Java对象转换Json的细节处理 前言 Java对象在转json的时候,如果对象里 ...

  2. java map转JSON对象

    java map转JSON对象 net.sf.json.JSONObject.fromObject(map)

  3. FastJson、Jackson、Gson进行Java对象转换Json的细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  4. java map转json字符串_Java-Gso-json字符串解析-php后台返回字段类型可能为字符串(/空字符串)或者对象的情况...

    其实本来android前端定义的对象类型是对象,如果后台没有值的情况下,理论上给null,如果是数组给[]或者null都可以的.这样Gson再解析转换的时候就不会出问题!但是最近重构发现后台如果没有字 ...

  5. java处理json的工具类(list,map和json的之间的转换)

    需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...

  6. List、Map 与json转换的工具类

    最近做公司项目安排做后台,因为写接口给别人用,就不能随随便便返回数据与接收数据了,为了统一性,要求统一用json来传输数据,为了方便后期的代码的维护以及代码的简洁,笔者整理了一下json与List.M ...

  7. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象

    文章目录 后端部分 前端部分 后端部分 Option op = new Option("海淀","hd");//java对象转换json对象 JSONObjec ...

  8. java处理json字符串_常见java对象转换为json字符串处理!!!

    1.JSON简介 1. 概念: JavaScript Object NotationJavaScript对象表示法 Person p = new Person(); p.setName("张 ...

  9. java 把map转换成json_map转换成JSON的3种方法

    1 json-lib net.sf.json-lib json-lib 2.4 jdk15 import java.util.HashMap; import java.util.Map; import ...

  10. 【Java】json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理)

    [Java]json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理) 模拟请求API 获得json数据,将json转换为java对象,再将java对象转换为list集合,再将list ...

最新文章

  1. 聊天机器人之环境准备
  2. 文件服务器raid1设置,文件服务器raid1设置
  3. 论Docker swarm与Kubernetes孰强孰弱
  4. FrostSulliven最新发布引领全球增长的60大技术
  5. wprintf显示中文
  6. Authorization object的where used列表功能,位于事务码SUIM
  7. wmic cpu get processorid获取的都一样_DJL 之 Java 玩转多维数组,就像 NumPy 一样
  8. 命令行读写i2c寄存器操作
  9. 【转】Request.Form.Get() Request.Form Request[]区别
  10. linux安装unity桌面环境,Ubuntu 14.04 server安装桌面环境
  11. 远程显示协议对比:RemoteFX vs. HDX vs. PCoIP
  12. FX DocuPrint M268 dw打印机硒鼓清零
  13. 介绍两款实用软件:CCPROXY和SOCKSCAP
  14. SAXReader解析器
  15. 常犇_武汉大学管理学院2019年工商管理硕士(MBA)第三批复试通知
  16. 计算机网络面经八股文
  17. ui设计是干啥的: ui设计师主要是做什么的呢
  18. 全球行政区划数据库 地理数据库
  19. 《Java 技术体系》之一:Java 技术体系概览
  20. 基于asp.net网上报名系统的设计与实现

热门文章

  1. 记忆化搜索:POJ1088-滑雪(经典的记忆化搜索)
  2. 在Application中集成Microsoft Translator服务之使用http获取服务
  3. 关于get和post的区别
  4. MVC4 EF6 MYSQL
  5. Java类权限和类成员权限举例解析
  6. c语言线程原理,线程池的原理和实现c语言
  7. 非受检异常_Java异常(Exception)类型及处理
  8. 监测系统的cpu,物理内存,磁盘的使用
  9. CVPR2019| CVPR论文
  10. PYQT之- QObject与线程QThread的关系