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!
java json json-schema maven jsonobject jsontokener
Commentami!