I use sf.json library to map form data for incoming request in my web application in java.
Lets say the incoming request is http://localhost:8080/app/addProfile with form data as:
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"
}
Server Side :
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
}
...
...
...
The main problem with this approach is if there is minor modification in the JSON
structure, then the entire code needs to be modified.
Is there is any api where i can configure the rules which are required for validation?
The simplest way to check if JSON is valid is to load the JSON into a JObject or JArray and then use the IsValid(JToken, JsonSchema) method with the JSON Schema. To get validation error messages, use the IsValid(JToken, JsonSchema, IList<String> ) or Validate(JToken, JsonSchema, ValidationEventHandler) overloads.
JSON Schema Validation: The JSON Schema Validation specification is the document that defines the valid ways to define validation constraints. This document also defines a set of keywords that can be used to specify validations for a JSON API.
Validating with JSONObject Let's try it with a simple example: String json = "{\"email\": \"example@com\", \"name\": \"John\"}"; assertTrue(validator. isValid(json)); String json = "Invalid_Json"; assertFalse(validator.
To check if a string is JSON in JavaScript, we can use the JSON. parse method within a try-catch block. to check if jsonStr is a valid JSON string. Since we created the JSON string by calling JSON.
You can use the Json validator: - https://github.com/fge/json-schema-validator
Or you can simply try to parse the Json using Google Gson and catch syntax exception to validate it like below :-
try{
JsonParser parser = new JsonParser();
parser.parse(passed_json_string);
}
catch(JsonSyntaxException jse){
System.out.println("Not a valid Json String:"+jse.getMessage());
}
For generic data validation, define the rules in your Json schema and then just validate the incoming Json against this schema.
In schema you can define the type of values it can contain, range etc.
For schema generation, you can use online tool like :- http://jsonschema.net/#/
You can refer this post, to have quick understanding of json schema:- http://json-schema.org/example1.html
Example:-
"price": {
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
}
Above code defines the price in Json schema, when Json object is validated against this schema, it will ensure that price shouldn't be zero, it should be more than zero and it should be a number. If a string or zero or some negative value is passed in price, the validation will fail.
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;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With