Java では、JSON、つまり JavaScript Object Notation がサーバー側の応答を操作する際に非常に重要な役割を果たします。 Java では、JSON スキーマに対して JSON ドキュメントを検証できます。検証を実行するには、 networknt JSON スキーマバリデーター 図書館。
このライブラリを使用する理由は、JSON ライブラリとして Jackson を使用し、最新の JSON スキーマ バージョンをサポートしているためです。 networknt ライブラリは ジャワ JSON スキーマ検証のための JSON Schema Core Draft v4、v6、v7、および v2019-09 (この例で使用する) 仕様の実装。デフォルトの JSON パーサーとして Jackson が含まれています。
まず、検証を実行するためにプログラムで使用する JSON ドキュメントと JSON スキーマの例を取り上げます。
JSONドキュメント
{ 'name': 'Emma Watson', 'artist': 'Paul Walker', 'description': null, 'tags': ['oil', 'famous'] }
JSONスキーマ
{ '$schema': 'https://json-schema.org/draft/2019-09/schema#', '$id+': 'http://my-paintings-api.com/schemas/painting-schema.json', 'type': 'object', 'title': 'Painting', 'description': 'Painting information', 'additionalProperties': true, 'required': ['name', 'artist', 'description', 'tags'], 'properties': { 'name': { 'type': 'string', 'description': 'Painting name' }, 'artist': { 'type': 'string', 'maxLength': 50, 'description': 'Name of the artist' }, 'description': { 'type': ['string', 'null'], 'description': 'Painting description' }, 'tags': { 'type': 'array', 'items': { '$ref': '#/$defs/tag' } } }, '$defs': { 'tag': { 'type': 'string', 'enum': ['oil', 'watercolor', 'digital', 'famous'] } } }
pom.xml ファイルに次の依存関係を追加します。
com.networknt json-schema-validator 1.0.42
を使用することもできます。 org.everit.json JSON オブジェクトを検証するためのライブラリ。これを使用するには、pom.xml ファイルに次の依存関係を追加する必要があります。
org.everit.json org.everit.json.schema 1.11.1
私たちの場合は、 ネットワークNT Javaのライブラリ。
次の手順を使用して JSON ドキュメントを検証します。
- 新しい Maven プロジェクトを作成します。
- JSON スキーマバリデーターの依存関係を pom.xml ファイルに追加します。
- ObjectMapper を使用して、JSON ドキュメントからデータとスキーマを読み取ります。
- JsonSchemaFactory の validate() メソッドを使用して、JSON ドキュメントを検証します。
- 返された結果を検証セットに保存し、画面に表示します。
これですべてが設定されたので、JSON ドキュメントを検証する実際のコードを実装できます。
JsonValidatorExample.java
//import required classes and packages package javaTpoint.ObjectToJsonConversion; import java.io.InputStream; import java.util.Set; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.networknt.schema.JsonSchema; import com.networknt.schema.JsonSchemaFactory; import com.networknt.schema.SpecVersion; import com.networknt.schema.ValidationMessage; // create class to validate JSON document public class JsonValidatorExample { // create inputStreamFromClasspath() method to load the JSON data from the class path private static InputStream inputStreamFromClasspath( String path ) { // returning stream return Thread.currentThread().getContextClassLoader().getResourceAsStream( path ); } // main() method start public static void main( String[] args ) throws Exception { // create instance of the ObjectMapper class ObjectMapper objectMapper = new ObjectMapper(); // create an instance of the JsonSchemaFactory using version flag JsonSchemaFactory schemaFactory = JsonSchemaFactory.getInstance( SpecVersion.VersionFlag.V201909 ); // store the JSON data in InputStream try( InputStream jsonStream = inputStreamFromClasspath( 'C:\Users\ajeet\eclipse-workspace\data.json' ); InputStream schemaStream = inputStreamFromClasspath( 'C:\Users\ajeet\eclipse-workspace\schema.json' ) ){ // read data from the stream and store it into JsonNode JsonNode json = objectMapper.readTree(jsonStream); // get schema from the schemaStream and store it into JsonSchema JsonSchema schema = schemaFactory.getSchema(schemaStream); // create set of validation message and store result in it Set validationResult = schema.validate( json ); // show the validation errors if (validationResult.isEmpty()) { // show custom message if there is no validation error System.out.println( 'There is no validation errors' ); } else { // show all the validation error validationResult.forEach(vm -> System.out.println(vm.getMessage())); } } } }
説明
上記のコードでは、 バージョンフラグ 。を取得するには、 JsonSchemaFactory 、コンストラクターでそのバージョン フラグを渡す必要があります。私たちの場合、使用します 2019-09 JSON スキーマのバージョン。
また、カスタム ヘルパー メソッド、つまり inputStreamFromClasspath() を使用して、両方のファイルをクラスパスからロードします。 Jackson ObjectMapper クラスのインスタンスを作成して、InputStream から JSON データを読み取ります。その後、InputStream データを解析して JsonNode オブジェクトにします。 JsonSchemaFactory のインスタンスを使用して、JsonSchema オブジェクトを取得して、JsonNode を検証します。 1 つ以上の ValidationMessage オブジェクトを含む検証エラーのセットを作成します。検証エラーがない場合、検証セットは空になります。
出力