web-dev-qa-db-ja.com

JavaでJSONオブジェクトを検証する方法は?

Sf.jsonライブラリを使用して、JavaのWebアプリケーションで受信リクエストのフォームデータをマッピングします。

着信リクエストが 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はありますか?

11
N3WOS

Jsonバリデーターを使用できます。- https://github.com/fge/json-schema-validator

または、Google Gsonを使用してJsonを解析し、構文例外をキャッチして以下のように検証することもできます。

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オブジェクトがこのスキーマに対して検証されると、価格がゼロではなく、ゼロより大きく、数値であることが保証されます。ストリングまたはゼロまたは何らかの負の値が価格で渡されると、検証は失敗します。

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