Java EE 8 JSON-Binding API
JAVA EE8 中新的 JSON Binding API (JSON-B) 支持在 Java 对象与JSON之间序列化和反序列化(兼容 RFC 7159 ),同时与 JAXB (Java API for XML Binding 2.0) 保持一致。
这个比较容易理解,比如常用的fastjson, 现在只是用jsonb的接口来实现序列化和反序列化,如现有对象Person:
package com.iflytek.jsonb;
public class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
将对象Person 实例转为json字符串, 只需要调用Jsonb 的toJson 方法,而将json字符串反序列为对象则调用fromJson即可实现
package com.iflytek.jsonb;
import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;
public class PersonTest {
public static void main(String[] args) {
Person p = new Person();
p.setName("LiLei");
p.setAge(15);
Jsonb jsonb = JsonbBuilder.create();
String json = jsonb.toJson(p);
System.out.println(json);
Person p1 = jsonb.fromJson("{\"age\":4,\"name\":\"HanMeimei\"}", Person.class);
System.out.println(p1);
}
}
对于输出的格式,也可以像fastjson一样,定制输出实际想要的内容,下面的代码示例为将name 转为enName, 并且将结果格式化
PropertyNamingStrategy pns = new PropertyNamingStrategy() {
@Override
public String translateName(String propertyName) {
if ("name".equals(propertyName)) {
return "enName";
}
return propertyName;
}
};
JsonbConfig config = new JsonbConfig().withPropertyNamingStrategy(pns);
config.withFormatting(true);
Jsonb jsonb1 = JsonbBuilder.create(config);
System.out.println(jsonb1.toJson(p));
当然类似指定名称,也可以用注解简单的实现,而不需要像上述代码这样繁琐,只需要在类属性上添加@JsonbProperty 注解即可
@JsonbProperty("enName")
private String name;
Jsonb 默认支持了java8 的time api, 在person 中添加属性birthday
private LocalDate birthday;
序列化或反序列化时可直接转换
Person p1 = jsonb.fromJson("{\"age\":4,\"enName\":\"HanMeimei\",\"birthday\":\"2018-05-07\"}", Person.class);
System.out.println(p1);
更多内容可以参考
http://json-b.net/getting-started.html#
https://www.ibm.com/developerworks/cn/java/j-javaee8-json-binding-1/index.html

浙公网安备 33010602011771号