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

原文地址:https://www.cnblogs.com/ljgeng/p/9000481.html