Как проверить объект JSON в java?
Я использую библиотеку sf.json для отображения данных формы для входящего запроса в своем веб-приложении в java.
Предположим, что входящий запрос http://localhost:8080/app/addProfile с данными формы:
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"
}
Сторона сервера:
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
}
...
...
...
Основная проблема с этим подходом заключается в незначительной модификации структуры JSON
, тогда весь код необходимо изменить.
Есть ли какой-либо api, где я могу настроить правила, необходимые для проверки?
Ответы
Ответ 1
Вы можете использовать Json validator: -
https://github.com/fge/json-schema-validator
Или вы можете просто попытаться разобрать Json с помощью Google Gson и исключить синтаксис catch, чтобы проверить его, как показано ниже: -
try{
JsonParser parser = new JsonParser();
parser.parse(passed_json_string);
}
catch(JsonSyntaxException jse){
System.out.println("Not a valid Json String:"+jse.getMessage());
}
Для общей проверки данных определите правила в вашей схеме Json, а затем просто подтвердите входящий Json против этой схемы.
В схеме вы можете определить тип значений, которые он может содержать, диапазон и т.д.
Для генерации схемы вы можете использовать онлайн-инструмент, например: - http://jsonschema.net/#/
Вы можете сослаться на это сообщение, чтобы быстро понять схему json: - http://json-schema.org/example1.html
Пример: -
"price": {
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
}
Над кодом определяет цену в схеме Json, когда объект Json проверяется на эту схему, он гарантирует, что цена не должна быть равна нулю, она должна быть больше нуля, и она должна быть числом. Если строка или ноль или какое-либо отрицательное значение передается в цене, проверка не будет выполнена.
Ответ 2
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;
}
Ответ 3
Распечатайте объект JSON, используя:
Log.e("JSON OBJECT CREATED:", jsonobject.toString());
И затем используйте json validator онлайн для проверки json.