Как проверить объект 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.