Validare un JSON in Kotlin
n pratica vogliamo validare un JSON che magari finisce nel nostro db, o che dobbiamo elaborare.
Per fare questo in Kotlin ho usato la libreria json-schema.
Se usate Maven:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.everit-org.json-schema</groupId>
<artifactId>org.everit.json.schema</artifactId>
<version>1.12.2</version>
</dependency>
</dependencies>
Detto questo, la libreria prevede un file come schema da cui validare poi i dati JSON.
Ad esempio (schema.json):
{
"$schema": "http://json-schema.org/draft-07/schema",
"title": "Prodotto",
"description": "Un prodotto",
"type": "object",
"properties": {
"id": {
"description": "Lo SKU del prodotto",
"type": "integer"
},
"name": {
"description": "Il nome del prodotto",
"type": "string"
},
"price": {
"type": "number",
"minimum": 0
}
},
"required": ["id", "name", "price"]
}
Poi creiamo un file per il prodotto (prodotto.json):
{
"id": 1,
"name": "Prodotto 1",
"price": 10
}
Il codice Kotlin sarà una cosa del genere:
import org.everit.json.schema.Schema
import org.everit.json.schema.ValidationException
import org.everit.json.schema.loader.SchemaLoader
import org.json.JSONObject
import org.json.JSONTokener
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.InputStream
fun main(args: Array) {
try {
val schema = "schema.json"
val prodotto = "prodotto.json"
val inputSchema: InputStream = FileInputStream(schema)
val inputProdotto: InputStream = FileInputStream(prodotto)
val s: Schema = SchemaLoader.load(JSONObject(JSONTokener(inputSchema)))
s.validate(JSONObject(JSONTokener(inputProdotto)))
} catch (ex: FileNotFoundException) {
println(ex.message)
} catch (ex: ValidationException) {
println(ex.message)
}
}
Fate qualche prova nel file del prodotto per capire come funziona la validazione.
Enjoy!
kotlin json json-schema maven jsonobject jsontokener
Commentami!