- はじめに
- APIとAPI実装でプロジェクトが分離された
- java.lang.Number から JsonValue を取得するAPI追加
- JsonParser から最後のイベントを取得可能となった
- キー重複時の処理を設定可能となった
- JsonObjectBuilder メソッドの型境界の訂正
- 仕様の明確化
はじめに
Jakarta EE 10 で 2.0 から 2.1 へバージョンアップする Jakarta JSON Processing の変更点のまとめです。
特に大きな変更内容は含まれていません。
APIとAPI実装でプロジェクトが分離された
Jakarta Mail などと同様に、API(およびTCK)とAPIの実装にプロジェクトが分離されました。
APIの実装は、JSON Binding の Eclipse Yasson に対して、Eclipse Parsson になりました。
java.lang.Number から JsonValue を取得するAPI追加
Json
に java.lang.Number
を引数に JsonNumber
を取得するメソッドが追加されました。
public static JsonNumber createValue(Number value) { return JsonProvider.provider().createValue(value); }
JsonParser から最後のイベントを取得可能となった
JsonParser に最後にスローされたイベントを再取得するメソッドが追加されました。
JsonParser
に以下のメソッドが追加されています。
/** * Returns the event for the current parsing state. * @return the event for the current parsing state * @since 2.1 */ default public Event currentEvent() { throw new UnsupportedOperationException(); }
キー重複時の処理を設定可能となった
重複したキーを処理するための標準プロパティが定義されました。
public final class JsonConfig { public static final String KEY_STRATEGY = "jakarta.json.JsonConfig.keyStrategy" ; public static enum KeyStrategy { /** Configuration value that will take the value of the first match. */ FIRST, /** Configuration value that will take the value of the last match. */ LAST, /** Configuration value that will throw {@link JsonException} when duplicate key is found. */ NONE; } }
以下のように使うことになるでしょう。
Map<String, Object> config = new HashMap<>();
config.put(jakarta.json.JsonConfig.KEY_STRATEGY, jakarta.json.JsonConfig.KeyStrategy.LAST);
JsonReaderFactory factory = Json.createReaderFactory(config);
JsonObjectBuilder メソッドの型境界の訂正
Json#createObjectBuilder()
の型引数が訂正されました。
以下のように実用性のなかったものが、
public static JsonObjectBuilder createObjectBuilder(Map<String, Object> map) { return JsonProvider.provider().createObjectBuilder(map); }
以下のように変更されました。
public static JsonObjectBuilder createObjectBuilder(Map<String, ?> map) { return JsonProvider.provider().createObjectBuilder(map); }
仕様の明確化
JsonObjectBuilder.build() メソッドの挙動の明確化
JsonObjectBuilder#build
メソッドが builder
をクリアすることが明確化されました。
JSON Processing の仕様は JavaDoc なので、JavaDoc に明示されたということになります。
JsonGenerator#close メソッドの挙動の明確化
以下がJavaDocに明示されました。
完全な JSON オブジェクトが書き込まれた場合のみ、基礎となるストリームは閉じられる。 不完全なオブジェクトの場合、JsonGenerationException がスローされ、基礎となるストリームはクローズされません。
JsonParser メソッドの挙動の明確化
JsonParser
のメソッド、 getObject()
, getValue()
, getArray()
はパーサーの状態を進めるため、
JavaDocに以下の @throws が明記されました。
/** * ... * @throws jakarta.json.JsonException if an i/o error occurs (IOException would be cause of JsonException) * @throws JsonParsingException if the parser encounters invalid JSON when advancing to next state. * @throws java.util.NoSuchElementException if there are no more parsing states. */