Jackson JSON を使用して文字列を取得し、それが有効な JSON であるかどうかを判断しようとしています。使用するコード サンプル (Java) を提案できる人はいますか?
7 に答える
これのユースケースが何であるかはわかりませんが、これでうまくいくはずです:
public boolean isValidJSON(final String json) {
boolean valid = false;
try {
final JsonParser parser = new ObjectMapper().getJsonFactory()
.createJsonParser(json);
while (parser.nextToken() != null) {
}
valid = true;
} catch (JsonParseException jpe) {
jpe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
return valid;
}
Perception の回答はおそらく多くのニーズに適合しますが、キャッチできない問題がいくつかあります。そのうちの 1 つは重複キーです。次の例を検討してください。
String json = "{ \"foo\" : \"bar\", \"foo\" : \"baz\" }";
補足として、次のコードを使用して重複キーをチェックできます。
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
objectMapper.readTree(json);
JsonProcessingException
重複キーまたはその他のエラーがスローされます。
Bean Validation API を個別に使用することをお勧めします。つまり、最初にデータを POJO にバインドしてから、POJO を検証します。データ形式レベル スキーマは、私の意見ではあまり有用ではありません。通常、より高いレベルの問題を検証する必要があり、スキーマ言語自体は扱いにくいです。検証されている形式を使用するもの (XML スキーマと JSON スキーマの両方にこの基本的な欠陥があります)。これを行うと、コードがよりモジュール化され、再利用可能になり、問題 (シリアル化、データ検証) が分離されます。
しかし、実際にはさらに一歩進んで、DropWizard をご覧になることをお勧めします。DropWizardは、 Jackson と Validation API の実装 (Hibernate プロジェクトから) を統合しています。