版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。undefined本文链接:https://blog.csdn.net/qq_37933685/article/details/102932452
demo/fastjson at master · suveng/demo · GitHub
如果有更好的可以联系作者修正,哈哈哈哈
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
demo.java
/**
* 序列化一个对象成JSON字符串
* @author suwenguang
* @date 2019/11/6
*/
public String ObjToJsonString(){
Human human = new Human();
human.setBody("good");
human.setSpirit("上天");
human.setBirthday(new Date());
human.setAge(22L);
ArrayList<Human> famaily = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Human member = new Human();
member.setBody("good");
member.setSpirit("上天");
member.setBirthday(new Date());
member.setAge(22L);
famaily.add(member);
}
human.setFamaily(famaily);
return JSON.toJSONString(human);
}
hunman.java
@Data
public class Human {
/**
* 身体
*/
private String body;
/**
* 精神
*/
private String spirit;
/**
* 出生日期
*/
private Date birthday;
/**
* 年龄
*/
private Long age;
/**
* 家庭
*/
private List<Human> famaily;
}
结果
{
"age": 22,
"birthday": 1573007531738,
"body": "good",
"famaily": [
{
"age": 22,
"birthday": 1573007531738,
"body": "good",
"spirit": "上天"
},
{
"age": 22,
"birthday": 1573007531738,
"body": "good",
"spirit": "上天"
},
{
"age": 22,
"birthday": 1573007531738,
"body": "good",
"spirit": "上天"
},
{
"age": 22,
"birthday": 1573007531738,
"body": "good",
"spirit": "上天"
},
{
"age": 22,
"birthday": 1573007531738,
"body": "good",
"spirit": "上天"
}
],
"spirit": "上天"
}
demo.java 使用刚刚的序列化字符串做 反序列化
/**
* 反序列化字符串到java对象
* @author suwenguang
* @date 2019/11/6
*/
public Human stringToObject(){
String json = "{\n" +
" \"age\": 22,\n" +
" \"birthday\": 1573007531738,\n" +
" \"body\": \"good\",\n" +
" \"famaily\": [\n" +
" {\n" +
" \"age\": 22,\n" +
" \"birthday\": 1573007531738,\n" +
" \"body\": \"good\",\n" +
" \"spirit\": \"上天\"\n" +
" },\n" +
" {\n" +
" \"age\": 22,\n" +
" \"birthday\": 1573007531738,\n" +
" \"body\": \"good\",\n" +
" \"spirit\": \"上天\"\n" +
" },\n" +
" {\n" +
" \"age\": 22,\n" +
" \"birthday\": 1573007531738,\n" +
" \"body\": \"good\",\n" +
" \"spirit\": \"上天\"\n" +
" },\n" +
" {\n" +
" \"age\": 22,\n" +
" \"birthday\": 1573007531738,\n" +
" \"body\": \"good\",\n" +
" \"spirit\": \"上天\"\n" +
" },\n" +
" {\n" +
" \"age\": 22,\n" +
" \"birthday\": 1573007531738,\n" +
" \"body\": \"good\",\n" +
" \"spirit\": \"上天\"\n" +
" }\n" +
" ],\n" +
" \"spirit\": \"上天\"\n" +
"}";
return JSON.parseObject(json, Human.class);
}
结果
@JsonField
字段注解配置
/**
* 出生日期
*/
@JSONField(format = "yyyy-MM")
private Date birthday;
结果
{
"age": 22,
"birthday": "2019-11",
"body": "good",
"famaily": [
{ "age": 22, "birthday": "2019-11", "body": "good", "spirit": "上天" },
{ "age": 22, "birthday": "2019-11", "body": "good", "spirit": "上天" },
{ "age": 22, "birthday": "2019-11", "body": "good", "spirit": "上天" },
{ "age": 22, "birthday": "2019-11", "body": "good", "spirit": "上天" },
{ "age": 22, "birthday": "2019-11", "body": "good", "spirit": "上天" }
],
"spirit": "上天"
}
使用 JsonField 配置日期格式,被 FastJsonConfig 的全局配置覆盖掉 · Issue #1868 · alibaba/fastjson · GitHub
JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
名称 | 含义 |
---|---|
QuoteFieldNames | 输出 key 时是否使用双引号,默认为 true |
SkipTransientField | 如果是 true,类中的 Get 方法对应的 Field 是 transient,序列化时将会被忽略。默认为 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 |
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 |
BeanToArray | 将对象转为 array 输出 |
SerializeFilter 是通过编程扩展的方式定制序列化。Fastjson 支持 6 种 SerializeFilter,用于不同场景的定制序列化。
解决: 关闭循环依赖检测 DisableCircularReferenceDetect