FastJSON将Java对象转为json,⽇期显⽰时间戳未格式化解决
办法
JSON版本:FastJson
Java 对象转换为 JSON 格式
定义以下 Person JavaBean:
public class Person {
@JSONField(name = "AGE")
private int age;
@JSONField(name = "FULL NAME")
private String fullName;
@JSONField(name = "DATE OF BIRTH")
private Date dateOfBirth;
public Person(int age, String fullName, Date dateOfBirth) {
super();
this.age = age;
this.fullName= fullName;
this.dateOfBirth = dateOfBirth;
}
// 标准 getters & setters
}
可以使⽤ JSONString() 将 Java 对象转换换为 JSON 对象:
private List<Person> listOfPersons = new ArrayList<Person>();
@Before
public void setUp() {
listOfPersons.add(new Person(15, "John Doe", new Date()));
unix时间戳转换日期格式listOfPersons.add(new Person(20, "Janette Doe", new Date()));
}
@Test
public void whenJavaList_thanConvertToJsonCorrect() {
String jsonOutput= JSONString(listOfPersons);
}
输出结果为:
[
{
"AGE":15,
"DATE OF BIRTH":1468962431394,
"FULL NAME":"John Doe"
},
{
"AGE":20,
"DATE OF BIRTH":1468962431394,
"FULL NAME":"Janette Doe"
}
]
我们还可以⾃定义输出,并控制字段的排序,⽇期显⽰格式,序列化标记等。
接下来我们更新 bean 并添加⼏个字段:
@JSONField(name="AGE", serialize=false)
private int age;
@JSONField(name="LAST NAME", ordinal = 2)
private String lastName;
@JSONField(name="FIRST NAME", ordinal = 1)
private String firstName;
@JSONField(name="DATE OF BIRTH", format="dd/MM/yyyy", ordinal = 3)
private Date dateOfBirth;
以上代码中我们列出了基本参数类别,并使⽤ @JSONField 注解,以便实现⾃定义转换:
*format* 参数⽤于格式化date属性。
默认情况下, FastJson 库可以序列化 Java bean 实体,但我们可以使⽤ *serialize* 指定字段不序列化。
使⽤ *ordinal* 参数指定字段的顺序
这样,以上输出结果为:
[
{
"FIRST NAME":"Doe",
"LAST NAME":"Jhon",
"DATE OF BIRTH":"19/07/2016"
},
{
"FIRST NAME":"Doe",
"LAST NAME":"Janette",
"DATE OF BIRTH":"19/07/2016"
}
]
@JSONField
@JSONField 的作⽤对象:
Field
Setter 和 Getter ⽅法
注意:FastJson 在进⾏操作时,是根据 getter 和 setter 的⽅法进⾏的,并不是依据 Field 进⾏。
注意:若属性是私有的,必须有 set ⽅法。否则⽆法反序列化。
package com.alibaba.fastjson.annotation;
public @interface JSONField {
// 配置序列化和反序列化的顺序,1.1.42版本之后才⽀持
int ordinal() default 0;
// 指定字段的名称
String name() default "";
// 指定字段的格式,对⽇期格式有⽤
String format() default "";
// 是否序列化
boolean serialize() default true;
// 是否反序列化
boolean deserialize() default true;
}
2. JSONField 配置⽅式
FieldInfo 可以配置在 getter/setter ⽅法或者字段上。例如:
2.1 配置在 getter/setter 上
public class A {
private int id;
@JSONField(name="ID")
public int getId() {return id;}
@JSONField(name="ID")
public void setId(int value) {this.id = id;}
}
2.2 配置在 field 上
public class A {
@JSONField(name="ID")
private int id;
public int getId() {return id;}
public void setId(int value) {this.id = id;}
}
3. 使⽤format配置⽇期格式化
public class A {
// 配置date序列化和反序列使⽤yyyyMMdd⽇期格式
@JSONField(format="yyyyMMdd")
public Date date;
}
4. 使⽤ serialize/deserialize 指定字段不序列化
public class A {
@JSONField(serialize=false)
public Date date;
}
public class A {
@JSONField(deserialize=false)
public Date date;
}
5. 使⽤ ordinal 指定字段的顺序
默认 fastjson 序列化⼀个 java bean,是根据 fieldName 的字母序进⾏序列化的,你可以通过 ordinal 指定字段的顺序。这个特性需要 1.1.42以上版本。
public static class VO {
@JSONField(ordinal = 3)
private int f0;
@JSONField(ordinal = 2)
private int f1;
@JSONField(ordinal = 1)
private int f2;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论