Pengenalan Skema JSON di Jawa

1. Gambaran keseluruhan

JSON Schema adalah bahasa deklaratif untuk mengesahkan format dan struktur Objek JSON . Ini membolehkan kita menentukan bilangan primitif khas untuk menggambarkan dengan tepat seperti apa Objek JSON yang sah.

The JSON Schema spesifikasi dibahagikan kepada tiga bahagian:

  • JSON Schema Core: Spesifikasi JSON Schema Core adalah di mana istilah untuk skema ditentukan.
  • Pengesahan Skema JSON: Spesifikasi Pengesahan Skema JSON adalah dokumen yang menentukan cara yang sah untuk menentukan batasan pengesahan. Dokumen ini juga menentukan sekumpulan kata kunci yang dapat digunakan untuk menentukan pengesahan untuk API JSON. Dalam contoh berikut, kami akan menggunakan beberapa kata kunci ini.
  • JSON Hyper-Schema: Ini adalah lanjutan dari spesifikasi Skema JSON, di mana, kata kunci berkaitan hyperlink dan hypermedia ditentukan.

2. Mendefinisikan Skema JSON

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

Berikut adalah Objek JSON ringkas yang mewakili katalog produk:

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

Kami dapat menentukan Skema JSONnya 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 kita lihat, Skema JSON adalah dokumen JSON , dan dokumen itu HARUS menjadi objek. Anggota objek (atau sifat) yang ditentukan oleh Skema JSON disebut kata kunci .

Mari jelaskan kata kunci yang telah kami gunakan dalam contoh kami:

  • Kata kunci $ schema menyatakan bahawa skema ini ditulis mengikut draf spesifikasi v4.
  • Kata kunci tajuk dan keterangan hanya bersifat deskriptif, kerana kata kunci tersebut tidak menambahkan batasan pada data yang disahkan. Maksud skema dinyatakan dengan dua kata kunci berikut: menerangkan produk.
  • Yang jenis kata kunci mentakrifkan kekangan pertama pada kami JSON data: ia telah menjadi satu Objek JSON .

Juga, Skema JSON MUNGKIN mengandungi sifat yang bukan kata kunci skema. Dalam id kes kami , nama , harga akan menjadi anggota (atau sifat) Objek JSON .

Untuk setiap harta tanah, kita dapat menentukan jenisnya . Kami mendefinisikan id dan nama sebagai rentetan dan harga sebagai nombor . Dalam Skema JSON bilangan boleh mempunyai minimum. Secara lalai minimum ini adalah inklusif, jadi kami perlu menentukan minimumMinimum .

Akhirnya, Skema memberitahu bahawa id , nama , dan harga adalah diperlukan .

3. Pengesahan Dengan Skema JSON

Dengan kami JSON Schema dimasukkan ke dalam tempat kita boleh mengesahkan kami Objek JSON .

Terdapat banyak perpustakaan untuk menyelesaikan tugas ini. Sebagai contoh, kami telah memilih perpustakaan skema json Java.

Pertama sekali, kita perlu menambahkan kebergantungan berikut ke pom.xml kami :

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

Akhirnya, kami dapat menulis beberapa kes ujian mudah untuk mengesahkan Objek JSON kami :

@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 kes ini, ValidationException yang dilemparkan akan menunjukkan # / harga. Sekiranya anda melihat konsol, ia akan mencetak output berikut:

#/price: 0.0 is not higher than 0 

Ujian kedua kelihatan 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); }

Oleh kerana kami menggunakan Objek JSON yang sah , tidak ada kesalahan pengesahan yang akan dilemparkan.

4. Kesimpulan

Dalam artikel ini, kami telah menentukan apa itu Skema JSON dan beberapa kata kunci yang relevan yang membantu kami menentukan skema kami.

Gandingan yang JSON Schema dengan sepadan fiturnya Objek JSON perwakilan kita boleh melakukan beberapa tugas pengesahan.

Kes ujian ringkas artikel ini boleh didapati dalam projek GitHub.