JAVA-map转换json异常
问题描述:
今天在做后台传数据到前端解析的时候遇到了这个问题。背景介绍下:后台传过去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异常相关推荐
- gson转对象变成null_FastJson、Jackson、Gson进行Java对象转换Json的细节处理
转 https://blog.csdn.net/moneyshi/article/details/51830329 Java对象转换Json的细节处理 前言 Java对象在转json的时候,如果对象里 ...
- java map转JSON对象
java map转JSON对象 net.sf.json.JSONObject.fromObject(map)
- FastJson、Jackson、Gson进行Java对象转换Json的细节处理
前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...
- java map转json字符串_Java-Gso-json字符串解析-php后台返回字段类型可能为字符串(/空字符串)或者对象的情况...
其实本来android前端定义的对象类型是对象,如果后台没有值的情况下,理论上给null,如果是数组给[]或者null都可以的.这样Gson再解析转换的时候就不会出问题!但是最近重构发现后台如果没有字 ...
- java处理json的工具类(list,map和json的之间的转换)
需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...
- List、Map 与json转换的工具类
最近做公司项目安排做后台,因为写接口给别人用,就不能随随便便返回数据与接收数据了,为了统一性,要求统一用json来传输数据,为了方便后期的代码的维护以及代码的简洁,笔者整理了一下json与List.M ...
- Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象
文章目录 后端部分 前端部分 后端部分 Option op = new Option("海淀","hd");//java对象转换json对象 JSONObjec ...
- java处理json字符串_常见java对象转换为json字符串处理!!!
1.JSON简介 1. 概念: JavaScript Object NotationJavaScript对象表示法 Person p = new Person(); p.setName("张 ...
- 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 ...
- 【Java】json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理)
[Java]json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理) 模拟请求API 获得json数据,将json转换为java对象,再将java对象转换为list集合,再将list ...
最新文章
- 多级页表如何节省内存
- 如何查看Linux内核是否为64位版本?
- Bitcoin ABC发布比特币现金升级时间表
- python随机生成字符串_如何随机生成大写字母和数字组成的字符串
- NRF24L01模块配置
- QT4 自定义槽和信号
- 目标检测之空间变形网络(STN)
- 函数c语言表示_C语言定义无参数的函数时,f()和f(void)有什么区别?
- vpp之node节点分析一: dual类型节点
- 淘宝前员工开发雨滴阅读,欲打造国产Instapaper
- 如何注册ocx文件。。。
- android模拟器录制视频教程,夜神安卓模拟器怎么录制视频 夜神安卓模拟器录制视频教程...
- oracle 数据库 有坏快,ORACLE数据库坏块的处理 (处理无对象坏快的方法)
- 内存数据库及技术选型
- BUUCTF刷题笔记
- 拼多多免费版 自动回复 关键词回复 提高3分钟回复率
- 网络安全入门基础须知
- 如何升级npm的版本
- 借助免费艾特二维码平台打造人气流量空间
- 12、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用 == 还是equals()? 它们有何区别?
热门文章
- C++ 常见编译错误解决办法
- php无法加载ssh扩展,php的ssh2扩展正常安装,却无法连接目标主机
- Layui 中引入Echarts模块
- 【直观图解】模型选择之-N折交叉验证法(v-fold cross-validation)
- div内文本(text)居中对齐
- Debugging a Create React App with VS Code
- STM32 f103 实现命令终端
- python 分类 投票_使用python+redis实现文章发布,投票,分组排名功能
- js createelement_如何在vue中继续使用layer.js,亲测好用
- python字典的作用_python字典方法介绍