Pengantar Skema JSON di Java

1. Ikhtisar

Skema JSON adalah bahasa deklaratif untuk memvalidasi format dan struktur Objek JSON . Ini memungkinkan kita untuk menentukan jumlah primitif khusus untuk menggambarkan dengan tepat seperti apa Objek JSON yang validakan terlihat.

The JSON Skema spesifikasi dibagi menjadi tiga bagian:

  • Inti Skema JSON: Spesifikasi Inti Skema JSON adalah tempat definisi terminologi untuk skema.
  • Validasi Skema JSON: Spesifikasi Validasi Skema JSON adalah dokumen yang menentukan cara yang valid untuk menentukan batasan validasi. Dokumen ini juga mendefinisikan sekumpulan kata kunci yang dapat digunakan untuk menentukan validasi untuk JSON API. Dalam contoh berikut, kami akan menggunakan beberapa kata kunci ini.
  • JSON Hyper-Schema: Ini adalah ekstensi lain dari spesifikasi JSON Schema, di mana hyperlink dan kata kunci yang berhubungan dengan hypermedia ditentukan.

2. Mendefinisikan Skema JSON

Sekarang kita telah mendefinisikan untuk apa Skema JSON digunakan, mari kita buat Objek JSON dan Skema JSON yang sesuai yang menjelaskannya.

Berikut ini adalah Objek JSON sederhana yang mewakili katalog produk:

{ "id": 1, "name": "Lampshade", "price": 0 }

Kita bisa mendefinisikan Skema JSON sebagai berikut:

{ "$schema": "//json-schema.org/draft-04/schema#", "title": "Product", "description": "A product from the catalog", "type": "object", "properties": { "id": { "description": "The unique identifier for a product", "type": "integer" }, "name": { "description": "Name of the product", "type": "string" }, "price": { "type": "number", "minimum": 0, "exclusiveMinimum": true } }, "required": ["id", "name", "price"] }

Seperti yang bisa kita lihat, Skema JSON adalah dokumen JSON , dan dokumen itu HARUS berupa objek. Anggota objek (atau properti) yang ditentukan oleh JSON Schema disebut kata kunci .

Mari kita jelaskan kata kunci yang telah kami gunakan dalam sampel kami:

  • Kata kunci $ schema menyatakan bahwa skema ini ditulis sesuai dengan spesifikasi draf v4.
  • Kata kunci judul dan deskripsi hanya bersifat deskriptif, karena tidak menambah batasan pada data yang divalidasi. Maksud dari skema dinyatakan dengan dua kata kunci berikut: mendeskripsikan produk.
  • Kata kunci type mendefinisikan batasan pertama pada data JSON kami : itu harus berupa Objek JSON .

Selain itu, Skema JSON MUNGKIN berisi properti yang bukan merupakan kata kunci skema. Dalam kasus kami id , nama , harga akan menjadi anggota (atau properti) dari Objek JSON .

Untuk setiap properti, kita bisa mendefinisikan tipenya . Kami mendefinisikan id dan nama sebagai string dan harga sebagai angka . Dalam JSON Schema, angka minimal. Secara default, minimum ini inklusif, jadi kita perlu menentukan exclusiveMinimum .

Akhirnya, Skema mengatakan bahwa id , nama , dan harga yang diperlukan .

3. Validasi Dengan Skema JSON

Dengan Skema JSON kami diberlakukan, kami dapat memvalidasi Objek JSON kami .

Ada banyak perpustakaan untuk menyelesaikan tugas ini. Sebagai contoh, kami telah memilih pustaka json-schema Java.

Pertama-tama, kita perlu menambahkan dependensi berikut ke pom.xml kita :

 org.everit.json org.everit.json.schema 1.3.0  

Akhirnya, kita dapat menulis beberapa kasus uji sederhana untuk memvalidasi Objek JSON kita :

@Test public void givenInvalidInput_whenValidating_thenInvalid() throws ValidationException { JSONObject jsonSchema = new JSONObject( new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/schema.json"))); JSONObject jsonSubject = new JSONObject( new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/product_invalid.json"))); Schema schema = SchemaLoader.load(jsonSchema); schema.validate(jsonSubject); }

Dalam kasus ini, ValidationException yang ditampilkan akan mengarah ke # / harga. Jika Anda melihat konsol, itu akan mencetak output berikut:

#/price: 0.0 is not higher than 0 

Tes kedua terlihat seperti berikut:

@Test public void givenValidInput_whenValidating_thenValid() throws ValidationException { JSONObject jsonSchema = new JSONObject( new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/schema.json"))); JSONObject jsonSubject = new JSONObject( new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/product_valid.json"))); Schema schema = SchemaLoader.load(jsonSchema); schema.validate(jsonSubject); }

Karena kami menggunakan Objek JSON yang valid , tidak ada kesalahan validasi yang akan terjadi.

4. Kesimpulan

Pada artikel ini, kami telah mendefinisikan apa itu JSON Schema dan kata kunci yang relevan yang membantu kami untuk mendefinisikan skema kami.

Menggabungkan Skema JSON dengan representasi Objek JSON yang sesuai , kita dapat melakukan beberapa tugas validasi.

Kasus uji sederhana dari artikel ini dapat ditemukan di proyek GitHub.