Validare un JSON in Kotlin

Mattepuffo's logo
Validare un JSON in Kotlin

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!


Condividi

Commentami!