web-dev-qa-db-fra.com

Comment valider un objet JSON en Java?

J'utilise la bibliothèque sf.json pour mapper les données de formulaire pour les demandes entrantes dans mon application Web en Java.

Disons que la demande entrante est http: // localhost: 8080/app/addProfile avec les données du formulaire comme:

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"
}

Du côté serveur :

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
}
...
...
...

Le principal problème avec cette approche est que s'il y a une modification mineure dans la structure JSON, alors le code entier doit être modifié.

Existe-t-il une API où je peux configurer les règles requises pour la validation?

11
N3WOS

Vous pouvez utiliser le validateur Json: - https://github.com/fge/json-schema-validator

Ou vous pouvez simplement essayer d'analyser le Json en utilisant Google Gson et d'attraper l'exception de syntaxe pour le valider comme ci-dessous: -

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

Pour la validation des données génériques, définissez les règles dans votre schéma Json, puis validez simplement le Json entrant par rapport à ce schéma.
Dans le schéma, vous pouvez définir le type de valeurs qu'il peut contenir, la plage, etc.
Pour la génération de schéma, vous pouvez utiliser un outil en ligne comme: - http://jsonschema.net/#/

Vous pouvez vous référer à cet article, pour avoir une compréhension rapide du schéma json: - http://json-schema.org/example1.html

Exemple:-

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

Le code ci-dessus définit le prix dans le schéma Json, lorsque l'objet Json est validé par rapport à ce schéma, il garantit que le prix ne doit pas être nul, il doit être supérieur à zéro et il doit être un nombre. Si une chaîne ou zéro ou une valeur négative est passé dans le prix, la validation échouera.

12
Amit Bhati
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;    
/**
         * 
         * @param inputJosn
         * @return
         * @throws IOException 
         * @throws JsonParseException 
         * @throws JsonProcessingException
         */
        private static boolean isJsonValid(String inputJosn) throws JsonParseException, IOException  {
            ObjectMapper mapper = new ObjectMapper();
            mapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
            JsonFactory factory = mapper.getFactory();
            JsonParser parser = factory.createParser(inputJosn);
            JsonNode jsonObj = mapper.readTree(parser);
            System.out.println(jsonObj.toString());


            return true;
        }
0
vaquar khan