Validare un JSON in Java

Mattepuffo's logo
Validare un JSON in Java

Validare un JSON in Java

In pratica vogliamo validare un JSON che magari finisce nel nostro db, o che dobbiamo elaborare.

Per fare questo in Java ho usato la libreria json-schema.

L'ho installata tramite Maven:

    <dependencies>
        <dependency>
            <groupId>com.github.everit-org.json-schema</groupId>
            <artifactId>org.everit.json.schema</artifactId>
            <version>1.12.2</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>

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,
            "exclusiveMinimum": true
        }
    },
    "required": ["id", "name", "price"]
}

Poi creiamo un file prodotto.json tipo questo:

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

A questo punto il codice Java:

package com.mp.test;

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.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class Main {

    public static void main(String[] args) {
        try {
            String schema = "/home/matte-server/Scrivania/schema.json";
            String prodotto = "/home/matte-server/Scrivania/prodotto.json";

            InputStream inputSchema = new FileInputStream(schema);
            InputStream inputProdotto = new FileInputStream(prodotto);

            Schema s = SchemaLoader.load(new JSONObject(new JSONTokener(inputSchema)));
            s.validate(new JSONObject(new JSONTokener(inputProdotto)));
        } catch (FileNotFoundException | ValidationException ex) {
            System.out.println(ex.getMessage());
        }
    }
}

Questo darà un errore, in quanto il prodotto è a zero:

#/price: 0.0 is not higher than 0

Fate un pò di prove per prendere confidenza con la libreria!

Enjoy!


Condividi

Commentami!