16

特定のJSONスキーマ文字列に対してJSON文字列を検証する最も簡単な方法を見つけるのに苦労しています(参考までに、これはJavaでAndroidアプリで実行されています)。

理想的には、JSON 文字列と JSON スキーマ文字列を渡すだけで、検証に合格するかどうかについてブール値が返されます。検索を通じて、これを達成するための次の 2 つの有望なライブラリを見つけました。

http://jsontools.berlios.de/

https://github.com/fge/json-schema-validator

ただし、最初のものはサポートが不十分でかなり時代遅れのようです。ライブラリをプロジェクトに実装しましたが、JavaDocs を使用しても、検証用の「Validator」オブジェクトを適切に構築する方法を知ることができませんでした。

良いテストコードで最新のように見える2番目のものと同様の話。ただし、私がやりたいことは非常に単純ですが、ValidateServlet.javaファイルを見た後でも、私がやりたいことを具体的に達成する方法については、少し気が遠くなり、混乱しているようです。

これを達成するための良い方法(見た目から)、必要な簡単なタスク、または上記の2番目のオプションに固執する必要があるかどうかについて、誰かが他の提案を持っているかどうか興味がありますか?前もって感謝します!

4

3 に答える 3

10

これは基本的に、リンク先のサーブレットが行うことなので、ワンライナーではないかもしれませんが、それでも表現力があります。

useV4useIdは、サーブレットで指定されているように、 と の検証オプションを指定するためのものDefault to draft v4ですUse id for addressing

オンラインで確認できます: http://json-schema-validator.herokuapp.com/

public boolean validate(String jsonData, String jsonSchema, boolean useV4, boolean useId) throws Exception {
   // create the Json nodes for schema and data
   JsonNode schemaNode = JsonLoader.fromString(jsonSchema); // throws JsonProcessingException if error
   JsonNode data = JsonLoader.fromString(jsonData);         // same here

   JsonSchemaFactory factory = JsonSchemaFactories.withOptions(useV4, useId);
   // load the schema and validate
   JsonSchema schema = factory.fromSchema(schemaNode);
   ValidationReport report = schema.validate(data);

   return report.isSuccess();
}
于 2013-01-24T22:18:37.613 に答える
3

@Alexの答えはAndroidでうまくいきましたが、Multi-dexと追加が必要でした:

    packagingOptions {
        pickFirst 'META-INF/ASL-2.0.txt'
        pickFirst 'draftv4/schema'
        pickFirst 'draftv3/schema'
        pickFirst 'META-INF/LICENSE'
        pickFirst 'META-INF/LGPL-3.0.txt'
    }

わたしのbuild.gradle

于 2016-10-13T02:18:08.930 に答える