问题描述:
今天在做后台传数据到前端解析的时候遇到了这个问题。背景介绍下:后台传过去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. 如何查看Linux内核是否为64位版本?
  3. Bitcoin ABC发布比特币现金升级时间表
  4. python随机生成字符串_如何随机生成大写字母和数字组成的字符串
  5. NRF24L01模块配置
  6. QT4 自定义槽和信号
  7. 目标检测之空间变形网络(STN)
  8. 函数c语言表示_C语言定义无参数的函数时,f()和f(void)有什么区别?
  9. vpp之node节点分析一: dual类型节点
  10. 淘宝前员工开发雨滴阅读,欲打造国产Instapaper
  11. 如何注册ocx文件。。。
  12. android模拟器录制视频教程,夜神安卓模拟器怎么录制视频 夜神安卓模拟器录制视频教程...
  13. oracle 数据库 有坏快,ORACLE数据库坏块的处理 (处理无对象坏快的方法)
  14. 内存数据库及技术选型
  15. BUUCTF刷题笔记
  16. 拼多多免费版 自动回复 关键词回复 提高3分钟回复率
  17. 网络安全入门基础须知
  18. 如何升级npm的版本
  19. 借助免费艾特二维码平台打造人气流量空间
  20. 12、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用 == 还是equals()? 它们有何区别?

热门文章

  1. C++ 常见编译错误解决办法
  2. php无法加载ssh扩展,php的ssh2扩展正常安装,却无法连接目标主机
  3. Layui 中引入Echarts模块
  4. 【直观图解】模型选择之-N折交叉验证法(v-fold cross-validation)
  5. div内文本(text)居中对齐
  6. Debugging a Create React App with VS Code
  7. STM32 f103 实现命令终端
  8. python 分类 投票_使用python+redis实现文章发布,投票,分组排名功能
  9. js createelement_如何在vue中继续使用layer.js,亲测好用
  10. python字典的作用_python字典方法介绍