当前位置: 首页 > 工具软件 > JSON-IO > 使用案例 >

JavaEE的JSON API规范JSON-P/JSON-B

越安翔
2023-12-01

从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也可以分为两大类:

  • 一次性读取全部JSON数据,在内存中构建出完整Tree Model的对象模型API
  • 一边读JSON数据,一边处理的Streaming API

2) JSON-P API的包结构

  • javax.json包,树状模型API相关的API

            Json类,所有JSON对象的工厂类,提供大量静态方法
                JsonBuilderFactory
                JsonObjectBuilder, JsonArrayBuilder

                JsonParserFactory, JsonGeneratorFactory
                JsonParser, JsonGenerator

                JsonReaderFactory, JsonWriterFactory
                JsonReader, JsonWriter
            JsonObject,以Map方式访问无序的name/value对合集
                可以通过JsonObjectBuilder构建
            JsonArray,以List方式访问有序的JsonObject合集
                可以通过JsonArrayBuilder构建

  • javax.json.stream包,Streaming处理相关的API

            JsonParser
            JsonGenerator

  • javax.json.spi包,一个SPI接口,运行时插入JSON处理对象的实现

3) JSON-P API的基本用法

  • 读取JSON数据,得到一个JsonObject对象
JsonReader jsonReader = Json.createReader("strJsonData");
JsonObject object = jsonReader.readObject();
jsonReader.close();

        说明,一个JsonObject对象的值可能是:
            JsonArray对象
            JsonNumber对象
            JsonString对象
            JsonObject对象
            JsonValue.TRUE值
            JsonValue.FALSE值
            JsonValue.NULL值

  • 读取JSON数据,得到一个JsonArray对象
JsonReader jsonReader = Json.createReader("[strJsonData]");
JsonArray array = jsonReader.readArray();
jsonReader.close();

        说明,一个JsonArray对象中可能包含:
            另一个嵌套的JsonArray对象
            JsonNumber对象
            JsonString对象
            JsonObject对象
            JsonValue.TRUE值
            JsonValue.FALSE值
            JsonValue.NULL值

  • 通过循环读取JsonArray对象中的一个值,得到一个JsonObject对象
JsonObject object = array.getJsonObject(int_index);
  • 将一个JsonObject对象转换为一个JsonArray对象
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的包结构

  • javax.json.bind
  • javax.json.bind.annotation
  • javax.json.bind.config
  • javax.json.bind.serializer
  • javax.json.bind.adapter
  • javax.json.bind.spi

2) JSON-B API的基本用法

  • 将Java对象转换为字符串的JSON数据
Jsonb jsonb = JsonbBuilder.create();
String result = jsonb.toJson(myDogObject);
  • 将字符串的JSON数据转换为Java对象
Dog dog = jsonb.fromJson("myDogJSONdata", MyDog.class);
  • 将字符串的JSON数据转换为List对象
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
 

 类似资料: