2015-08-16 24 views
7

Io uso la libreria sf.json per mappare i dati del modulo per la richiesta in arrivo nella mia applicazione web in java.Come convalidare un oggetto JSON in java?

Diciamo la richiesta in arrivo è http://localhost:8080/app/addProfile con dati del modulo come:

formData: { 
    "name":"applicant Name", 
    "Age":"26", 
    "academics":{ 
     "college":"80", 
     "inter":"67", 
     "matriculation":"89" 
    }, 
    "skill":{ 
     "computer":"c,c++,java", 
     "maths":"limit,permutation,statistics" 
    }, 
    "dateOfBirth":"09-07-1988" 
} 

lato server:

String requestFormData=request.getParameter("formData"); 
JSONObject formData = JSONObject.fromObject(requestFormData); 
String name= formData.getString("name"); 

if(name.length>70){ 
//error message for length validation 
} 

if(!name.matches("regex for name"){ 
//error message for name validation 
} 
... 
... 
... 

Il problema principale con questo approccio è se v'è lieve modifica nella struttura JSON, allora l'intero codice deve essere modificato.

C'è qualche api in cui è possibile configurare le regole richieste per la convalida?

+0

Non riesco a pensare a una situazione in cui è necessario un tipo di convalida da voi fornito. Ci sono un sacco di persone con nomi (prima e cognome) più lunghi di 70 anche 100 caratteri. – itwasntme

+1

Preferisco cercare alcune regole di convalida univoche come: l'età è il numero positivo, la data contiene il giorno-mese-anno, l'utente ha fornito almeno 2 abilità in ogni categoria. – itwasntme

risposta

7

È possibile utilizzare il validatore JSON: - https://github.com/fge/json-schema-validator

Oppure si può semplicemente cercare di analizzare il JSON utilizzando Google GSON ed eccezione sintassi cattura per convalidarlo come di seguito: -

try{ 
JsonParser parser = new JsonParser(); 
parser.parse(passed_json_string); 
} 
catch(JsonSyntaxException jse){ 
System.out.println("Not a valid Json String:"+jse.getMessage()); 
} 

per Generic convalida dei dati, definire le regole nello schema Json e quindi convalidare il JSON in arrivo su questo schema.
Nello schema è possibile definire il tipo di valori che può contenere, gamma, ecc
Per la generazione dello schema, è possibile utilizzare lo strumento online come: - http://jsonschema.net/#/

È possibile fare riferimento questo post, per avere una rapida comprensione dello schema JSON : - http://json-schema.org/example1.html

Esempio: -

"price": { 
      "type": "number", 
      "minimum": 0, 
      "exclusiveMinimum": true 
     } 

Sopra codice definisce il prezzo di schema di JSON, quando oggetto JSON viene convalidato contro questo schema, si farà in modo che il prezzo non dovrebbe essere zero, dovrebbe essere più di zero e dovrebbe essere un numero. Se una stringa o zero o qualche valore negativo è passato nel prezzo, la validazione fallirà.

+0

Ciao Amit grazie, convalida l'oggetto net.sf.json? – N3WOS

+1

Json è solo un formato di dati, si definisce uno schema per Json e quindi si convalida solo il json in arrivo su quello schema. –

+0

@ N3WOS cosa intendi per "validazione"? Vuoi verificare se i dati in arrivo 'json' sono validi (corretto in termini di specifiche) o vuoi controllare l'input dell'utente (età superiore a 18 anni, ecc.) ?? – itwasntme

-6

Stampa l'oggetto JSON utilizzando:

Log.e("JSON OBJECT CREATED:", jsonobject.toString()); 

e quindi utilizzare un validatore JSON on-line per convalidare il JSON.