Java 用 Azure JSON 共有ライブラリ - バージョン 1.1.0
Azure JSON には、JSON の共有プリミティブ、抽象化、ヘルパーが用意されています。
作業の開始
前提条件
- Java Development Kit (JDK) バージョン 8 以降。
パッケージを組み込む
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-json</artifactId>
<version>1.1.0</version>
</dependency>
主要な概念
JsonSerializable
JsonSerializable
は、オブジェクト自体が処理方法のロジックを管理するストリーム スタイルのシリアル化を使用して、オブジェクトを JSON でシリアル化および逆シリアル化する方法を定義するために使用されます。 インターフェイスは、 へのオブジェクトの書き込みを処理するインスタンスベースtoJson
の API と、 からを読み取JsonReader
ってオブジェクトJsonWriter
を作成する方法を定義するために実装が提供する必要がある静的 fromJson
API を提供します。実装が指定UnsupportedOperationException
されていない場合はスローされます。
JsonToken
JsonToken
は、JSON ストリームの現在の状態を示す基本的な列挙型です。
JsonReader
JsonReader
では、基本的な読み取りプリミティブ型とボックス化されたプリミティブ型の両方と、JSON を読み取るための API である配列、マップ、オブジェクトの読み取りが便利です。 JsonReader
は、実装がこのパッケージの test-jar (JsonReaderContractTests
) によって提供されるテストに合格する限り、基になる JSON パーサーが Jackson や GSON などのそれを実装できるようにするために提供されます。
JsonReader
は、 が呼び出されるまで nextToken
JSON ストリーム内で進行しません。つまり JsonReader.getInt
、JSON ストリームが前方に進むまで nextToken
、エラーなしで同じ整数を無期限に返すように呼び出すことができます。
JsonReader
では、JSON 文字列を数値に変換する、またはその逆の変換を行うなどの JSON 型間の型変換と、一般的に使用される非標準の JSON 値 (、 -INF
INF
Infinity
-Infinity
などNaN
) を使用できます。
JsonReader
は JSON 入力ソースの所有権を取得しないため、 または Reader
を使用して InputStream
JSON が提供されている場合、リソースは閉じられません。
入れ子の制限
JsonReader
のジェネリック readUntyped
API は、読み取られるオブジェクトがどれだけ深く入れ子になっているかを追跡します。 入れ子が の1000
IllegalStateException
しきい値を超える場合は、 を防ぐために StackOverflowError
がスローされます。
JsonWriter
JsonWriter
では、基本的なプリミティブの書き込みとボックス化されたプリミティブ型の両方が提供されます。また、JSON を書き込むための API である配列、マップ、オブジェクトの記述が便利です。 JsonWriter
は、実装がパッケージの test-jar (JsonWriterContractTests
) によって提供されるテストに合格する限り、基になる JSON ライターが Jackson や GSON などのそれを実装できるようにするために提供されます。
JsonWriter
では、一般的に使用される非標準の JSON 値 (、INF
-INF
Infinity
-Infinity
、 などNaN
) を または writeRawValue
を使用してwriteNumberField
書き込むことが可能になります。
JsonWriter
は、null byte[]
Boolean
String
Number
フィールドを使用してwriteNullField
書き込む必要がある場合、フィールド、writeBinaryField
writeBooleanField
または として書き込まれるときに null 値、、、writeNumberField
または writeStringField
値を書き込まない。
JsonWriter
に書き込まれたコンテンツが基になるコンテナーの種類 (通常は または Writer
) にフラッシュされるように、定期的にフラッシュするOutputStream
必要があります。 フラッシュに失敗すると、コンテンツが失われる可能性があります。 フラッシュ コンテンツをJsonWriter
閉じると、使用が完了したら が閉じられる try-with-resources ブロックJsonWriter
で を使用することをお勧めしますJsonWriter
。
JsonWriter
は JSON 出力ソースの所有権を取得しないため、JSON が または Writer
にOutputSteam
書き込まれている場合、リソースは閉じられません。
JSON 状態管理
書き込まれる JSON が有効であることを確認するために、 を使用して JsonWriteContext
JSON の状態を維持し、JsonWriter
書き込みを試行するたびに操作が有効かどうかを検証します。 の実装JsonWriter
では、状態が正しく追跡されていることを確認する必要がありますROOT
ROOT
。たとえば、JSON 状態が何も書き込まれず、JSON フィールド名の書き込みが許可されていない場合などです。
JsonProvider
JsonProvider
は、クラスパスで見つかった実装を使用して s と JsonWriter
s を作成できるようにするJsonReader
サービス プロバイダー インターフェイスです。 JsonProvider
クラスパスで実装が見つからない場合は、このパッケージによって提供される既定の実装を作成することもできます。
JsonOptions
JsonOptions
には、s と JsonWriter
s のすべての実装によって尊重される必要がある構成がJsonReader
含まれています。
現時点では、数値以外の数値、NaN
INF
Infinity
-INF
および が、既定の設定である の JSON 読み取りと-Infinity
書き込みでサポートされているかどうかを判断するための構成は 1 つだけで、数値以外のtrue
数値が許可されます。
SPI 実装の提供
JsonReader
および JsonWriter
は、 および JsonProviders
によってJsonProvider
使用されるサービス プロバイダー インターフェイスであり、クラス パスから実装を読み込むことができます。 Azure JSON パッケージは、クラス パスで見つからない場合に使用される既定の実装を提供します。 カスタム実装を提供するには、独自のパッケージに 、JsonWriter
、および JsonProvider
を実装JsonReader
し、パッケージが のJsonProvider
インスタンスを提供することを示します。 実装が正しいことを確認するには、Azure JSON のスコープ付き依存関係をtest
含め、、JsonWriterContractTests
、および JsonProviderContractTests
を拡張しますJsonReaderContractTests
。 これらのテストでは、および によってJsonReader
JsonWriter
設定されたすべての基本的なコントラクト要件の概要を説明しJsonProvider
、実装の検証を提供するためにいくつかの複雑なシナリオをテストします。
例
Azure JSON の使用方法の詳細な例については、 README のサンプル を参照してください。
トラブルシューティング
バグが発生した場合は、 GitHub の問題 を使用して問題を報告するか、 Azure Java SDK の StackOverflow をチェックアウトしてください。
次のステップ
Azure Core を使用して構築された Azure ライブラリの使用を開始します。
共同作成
このリポジトリへの投稿の詳細については、 投稿ガイドを参照してください。
- フォークする
- 機能ブランチを作成する (
git checkout -b my-new-feature
) - 変更をコミットする (
git commit -am 'Add some feature'
) - ブランチにプッシュする (
git push origin my-new-feature
) - 新しい Pull Request を作成する
Azure SDK for Java