依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> </dependency>
SerializerFeature属性
QuoteFieldNames | 输出key时是否使用双引号,默认为true | |
UseSingleQuotes | 使用单引号而不是双引号,默认为false | |
WriteMapNullValue | 是否输出值为null的字段,默认为false | |
WriteEnumUsingToString | Enum输出name()或者original,默认为false | |
UseISO8601DateFormat | Date使用ISO8601格式输出,默认为false | |
WriteNullListAsEmpty | List字段如果为null,输出为[],而非null | |
WriteNullStringAsEmpty | 字符类型字段如果为null,输出为”“,而非null | |
WriteNullNumberAsZero | 数值字段如果为null,输出为0,而非null | |
WriteNullBooleanAsFalse | Boolean字段如果为null,输出为false,而非null | |
SkipTransientField |
如果是true,类中的Get方法对应的Field是transient, 序列化时将会被忽略。默认为true |
|
SortField | 按字段名称排序后输出。默认为false | |
WriteTabAsSpecial | 把\t做转义输出,默认为false | 不推荐 |
PrettyFormat | 结果是否格式化,默认为false | |
WriteClassName | 序列化时写入类型信息,默认为false。反序列化是需用到 | |
DisableCircularReferenceDetect | 消除对同一对象循环引用的问题,默认为false | |
WriteSlashAsSpecial | 对斜杠’/’进行转义 | |
BrowserCompatible | 将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false | |
WriteDateUseDateFormat | 全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat); | |
DisableCheckSpecialChar | 一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false | |
NotWriteRootClassName | 含义 | |
BeanToArray | 将对象转为array输出 | |
WriteNonStringKeyAsString | 含义 | |
NotWriteDefaultValue | 含义 | |
BrowserSecure | 含义 | |
IgnoreNonFieldGetter | 含义 | |
WriteEnumUsingName | 含义 |
示例
准备
- User、Word来模拟各种数据类型。
- SerializerFeatureTest:JSON部分示例的示例方法。
User类型:缺省get、set方法
public class User { private int id; private String name; private String add; private String old; }
Word类型:缺省get、set方法
public class Word { private String d; private String e; private String f; private String a; private int b; private boolean c; private Date date; private Map<String , Object> map; private List<User> list; }
SerializerFeatureTest:测试类
public class SerializerFeatureTest { private static Word word; private static void init() { word = new Word(); word.setA("a"); word.setB(2); word.setC(true); word.setD("d"); word.setE(""); word.setF(null); word.setDate(new Date()); List<User> list = new ArrayList<User>(); User user1 = new User(); user1.setId(1); user1.setOld("11"); user1.setName("用户1"); user1.setAdd("北京"); User user2 = new User(); user2.setId(2); user2.setOld("22"); user2.setName("用户2"); user2.setAdd("上海"); User user3 = new User(); user3.setId(3); user3.setOld("33"); user3.setName("用户3"); user3.setAdd("广州"); list.add(user3); list.add(user2); list.add(null); list.add(user1); word.setList(list); Map<String , Object> map = new HashedMap(); map.put("mapa", "mapa"); map.put("mapo", "mapo"); map.put("mapz", "mapz"); map.put("user1", user1); map.put("user3", user3); map.put("user4", null); map.put("list", list); word.setMap(map); } public static void main(String[] args) { init(); // useSingleQuotes(); // writeMapNullValue(); // useISO8601DateFormat(); // writeNullListAsEmpty(); // writeNullStringAsEmpty(); // sortField(); // prettyFormat(); // writeDateUseDateFormat(); // beanToArray(); showJsonBySelf(); } /** * 9:自定义 * 格式化输出 * 显示值为null的字段 * 将为null的字段值显示为"" * DisableCircularReferenceDetect:消除循环引用 */ private static void showJsonBySelf() { System.out.println(JSON.toJSONString(word)); System.out.println(JSON.toJSONString(word, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteNullListAsEmpty)); } /** * 8: * 将对象转为array输出 */ private static void beanToArray() { word.setMap(null); word.setList(null); System.out.println(JSON.toJSONString(word)); System.out.println(JSON.toJSONString(word, SerializerFeature.BeanToArray)); } /** * 7: * WriteDateUseDateFormat:全局修改日期格式,默认为false。 */ private static void writeDateUseDateFormat() { word.setMap(null); word.setList(null); System.out.println(JSON.toJSONString(word)); JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd"; System.out.println(JSON.toJSONString(word, SerializerFeature.WriteDateUseDateFormat)); } /** * 6: * PrettyFormat */ private static void prettyFormat() { word.setMap(null); word.setList(null); System.out.println(JSON.toJSONString(word)); System.out.println(JSON.toJSONString(word, SerializerFeature.PrettyFormat)); } /** * SortField:按字段名称排序后输出。默认为false * 这里使用的是fastjson:为了更好使用sort field martch优化算法提升parser的性能,fastjson序列化的时候, * 缺省把SerializerFeature.SortField特性打开了。 * 反序列化的时候也缺省把SortFeidFastMatch的选项打开了。 * 这样,如果你用fastjson序列化的文本,输出的结果是按照fieldName排序输出的,parser时也能利用这个顺序进行优化读取。 * 这种情况下,parser能够获得非常好的性能。 */ private static void sortField() { System.out.println(JSON.toJSONString(word)); System.out.println(JSON.toJSONString(word, SerializerFeature.SortField)); } /** * 5: * WriteNullStringAsEmpty:字符类型字段如果为null,输出为"",而非null * 需要配合WriteMapNullValue使用,现将null输出 */ private static void writeNullStringAsEmpty() { word.setE(null); System.out.println(JSONObject.toJSONString(word)); System.out.println("设置WriteMapNullValue后:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.WriteMapNullValue)); System.out.println("设置WriteMapNullValue、WriteNullStringAsEmpty后:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty)); } /** * 4: * WriteNullListAsEmpty:List字段如果为null,输出为[],而非null * 需要配合WriteMapNullValue使用,现将null输出 */ private static void writeNullListAsEmpty() { word.setList(null); System.out.println(JSONObject.toJSONString(word)); System.out.println("设置WriteNullListAsEmpty后:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullListAsEmpty)); } /** * 3: * UseISO8601DateFormat:Date使用ISO8601格式输出,默认为false */ private static void useISO8601DateFormat() { System.out.println(JSONObject.toJSONString(word)); System.out.println("设置UseISO8601DateFormat后:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.UseISO8601DateFormat)); } /** * 2: * WriteMapNullValue:是否输出值为null的字段,默认为false */ private static void writeMapNullValue() { System.out.println(JSONObject.toJSONString(word)); System.out.println("设置WriteMapNullValue后:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.WriteMapNullValue)); } /** * 1: * UseSingleQuotes:使用单引号而不是双引号,默认为false */ private static void useSingleQuotes() { System.out.println(JSONObject.toJSONString(word)); System.out.println("设置useSingleQuotes后:"); System.out.println(JSONObject.toJSONString(word, SerializerFeature.UseSingleQuotes)); } }
对应输出结果如下:
-
1、useSingleQuotes:
-
2、writeMapNullValue:
-
3、useISO8601DateFormat:
-
4、writeNullListAsEmpty:
-
5、writeNullStringAsEmpty:
-
6、prettyFormat:
-
7、writeDateUseDateFormat:
-
8、beanToArray:
-
9、自定义组合:showJsonBySelf:
此时完整的输出如下: -
{"a":"a","b":2,"c":true,"d":"d","date":1473839656840,"e":"","list":[{"add":"广州","id":3,"name":"用户3","old":"33"},{"add":"上海","id":2,"name":"用户2","old":"22"},null,{"add":"北京","id":1,"name":"用户1","old":"11"}],"map":{"list":[{"$ref":"$.list[0]"},{"$ref":"$.list[1]"},null,{"$ref":"$.list[3]"}],"user3":{"$ref":"$.list[0]"},"mapz":"mapz","mapo":"mapo","mapa":"mapa","user1":{"$ref":"$.list[3]"}}} { "a":"a", "b":2, "c":true, "d":"d", "date":1473839656840, "e":"", "f":"", "list":[ { "add":"广州", "id":3, "name":"用户3", "old":"33" }, { "add":"上海", "id":2, "name":"用户2", "old":"22" }, null, { "add":"北京", "id":1, "name":"用户1", "old":"11" } ], "map":{ "list":[ { "add":"广州", "id":3, "name":"用户3", "old":"33" }, { "add":"上海", "id":2, "name":"用户2", "old":"22" }, null, { "add":"北京", "id":1, "name":"用户1", "old":"11" } ], "user4":null, "user3":{ "add":"广州", "id":3, "name":"用户3", "old":"33" }, "mapz":"mapz", "mapo":"mapo", "mapa":"mapa", "user1":{ "add":"北京", "id":1, "name":"用户1", "old":"11" } } }
注意:学习地址:
- http://blog.csdn.net/glarystar/article/details/6654494
- http://blog.csdn.net/u013163567/article/details/50736096项目github地址:
- https://github.com/gubaijin/buildmavenweb
相关推荐
- **格式化输出**:使用`JSON.toJSONString(obj, SerializerFeature... features)`,可以设置各种序列化特性,如是否输出空值、是否缩进等。 - **解析JSON**:`JSON.parse()`或`JSON.parseObject()`可以解析JSON...
具体来说,需要配置FastJsonHttpMessageConverter类,并将SerializerFeature.DisableCircularReferenceDetect通过属性注入到该转换器中。 配置示例如下: ```xml class=...
**Fastjson JSON格式化工具封装详解** Fastjson是阿里巴巴开源的一款高效、强大的Java语言实现的JSON库。它具有性能优异、使用简单等优点,广泛应用于Java Web开发中,特别是对于数据的序列化与反序列化操作。在...
- **日期格式化**: 自定义日期格式,如`JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"))`。 - **注解支持**: 使用`@JSONField`注解可以自定义...
**Fastjson.jar 知识点详解** Fastjson是阿里巴巴开源的一款高性能的JSON库,它能够帮助开发者在Java程序中快速地进行JSON与Java对象之间的转换。Fastjson.jar不仅包含了库的实现,还提供了API文档,使得开发过程...
FastJSON 库详解 FastJSON 是一个 Java 语言编写的高性能功能完善的 JSON 库。以下是 FastJSON 库的详细介绍: 什么是 FastJSON FastJSON 是一个高性能的 JSON 库,采用独创的算法,将 parse 的速度提升到极致,...
- **序列化配置**:可以通过`SerializerFeature`进行序列化配置,比如日期格式、是否忽略空值等。 - **自定义转换器**:当标准API不能满足需求时,可以注册自定义的`JsonDeserializer`和`JsonSerializer`。 6. **...
### FastJson应用案例详解 #### 一、FastJson简介与特点 FastJson是阿里巴巴开源的一款高性能的Java语言编写的用于处理JSON数据的库。它主要提供了两个核心功能:将Java对象转换为JSON字符串(序列化)以及将JSON...
Fastjson提供了丰富的序列化特性,如`SerializerFeature`枚举类中的选项。例如,`WriteNullNumberAsZero`会将null数值字段输出为0,`WriteNullListAsEmpty`将null列表字段输出为空数组,`WriteNullStringAsEmpty`则...
FastJson允许自定义Java类型和JSON之间的转换逻辑,通过实现`SerializerFeature`和`DeserializerFeature`。 ```java public class CustomDateDeserializer implements JSONDeserializer<Date> { @Override public...
例如,Fastjson默认不会序列化值为null的字段,但你可以通过`@JSONField(serialzeFeatures=SerializerFeature.WriteMapNullValue)`来改变这一行为,使得null值也能被序列化。 另外,值得注意的是,当字段为final时...
Java提供了多种处理JSON的库,比如Fastjson、Gson、Jackson等。本文将详细介绍如何使用Fastjson这个库来处理JSON数据。 Fastjson是由阿里巴巴开源的一款性能优秀、易于使用的Java JSON库。它可以将Java对象转换成...