42

Jackson JSON を使用して文字列を取得し、それが有効な JSON であるかどうかを判断しようとしています。使用するコード サンプル (Java) を提案できる人はいますか?

4

7 に答える 7

41

これのユースケースが何であるかはわかりませんが、これでうまくいくはずです:

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;
}
于 2012-04-19T12:04:04.880 に答える
23

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重複キーまたはその他のエラーがスローされます。

于 2014-09-25T07:45:22.030 に答える
12

Bean Validation API を個別に使用することをお勧めします。つまり、最初にデータを POJO にバインドしてから、POJO を検証します。データ形式レベル スキーマは、私の意見ではあまり有用ではありません。通常、より高いレベルの問題を検証する必要があり、スキーマ言語自体は扱いにくいです。検証されている形式を使用するもの (XML スキーマと JSON スキーマの両方にこの基本的な欠陥があります)。これを行うと、コードがよりモジュール化され、再利用可能になり、問題 (シリアル化、データ検証) が分離されます。

しかし、実際にはさらに一歩進んで、DropWizard をご覧になることをお勧めします。DropWizardは、 Jackson と Validation API の実装 (Hibernate プロジェクトから) を統合しています。

于 2012-04-19T22:05:52.590 に答える