从JavaEE 7开始,一个专门用于处理JSON数据的API被纳入JavaEE规范体系,这就是Java API for JSON Processing (JSON-P) 。在JavaEE 8中,又在此基础上提供了Java API for JSON Binding (JSON-B)。至此,与XML数据类似,JavaEE提供了完整的处理JSON数据的APIs。
目前,Glassfish为JSON-P提供了参考实现;Eclipse Yasson为JSON-B提供了参考实现。
1. JSON-P
JSON-P是JSR标准规范之一,用以解析、生成、转换和查询JSON数据的APIs。
1) 与大多数JSON处理的API相似,JSON-P中的API也可以分为两大类:
2) JSON-P API的包结构
Json类,所有JSON对象的工厂类,提供大量静态方法
JsonBuilderFactory
JsonObjectBuilder, JsonArrayBuilder
JsonParserFactory, JsonGeneratorFactory
JsonParser, JsonGenerator
JsonReaderFactory, JsonWriterFactory
JsonReader, JsonWriter
JsonObject,以Map方式访问无序的name/value对合集
可以通过JsonObjectBuilder构建
JsonArray,以List方式访问有序的JsonObject合集
可以通过JsonArrayBuilder构建
JsonParser
JsonGenerator
3) JSON-P API的基本用法
JsonReader jsonReader = Json.createReader("strJsonData");
JsonObject object = jsonReader.readObject();
jsonReader.close();
说明,一个JsonObject对象的值可能是:
JsonArray对象
JsonNumber对象
JsonString对象
JsonObject对象
JsonValue.TRUE值
JsonValue.FALSE值
JsonValue.NULL值
JsonReader jsonReader = Json.createReader("[strJsonData]");
JsonArray array = jsonReader.readArray();
jsonReader.close();
说明,一个JsonArray对象中可能包含:
另一个嵌套的JsonArray对象
JsonNumber对象
JsonString对象
JsonObject对象
JsonValue.TRUE值
JsonValue.FALSE值
JsonValue.NULL值
JsonObject object = array.getJsonObject(int_index);
JsonArray value = Json.createArrayBuilder()
.add(object)
.build();
2. JSON-B
JSON-B是JSR标准规范之一,实现JSON数据与Java对象之间的绑定。常见的Java primitive types和String类都能够自动绑定。
JSON-B的实现,往往是基于JSON-P的javax.json.stream API定义实现的。
1) JSON-B的包结构
2) JSON-B API的基本用法
Jsonb jsonb = JsonbBuilder.create();
String result = jsonb.toJson(myDogObject);
Dog dog = jsonb.fromJson("myDogJSONdata", MyDog.class);
List<MyDog> dogs = jsonb.fromJson("myDogsJSONResult", ArrayList.getClass());
参考链接:
https://javaee.github.io/jsonp/
http://json-b.net/
http://jcp.org/en/jsr/detail?id=374
https://javadoc.io/doc/javax.json/javax.json-api