programing

잭슨 JSON에서 JSON을 검증하는 방법

showcode 2023. 3. 31. 23:00
반응형

잭슨 JSON에서 JSON을 검증하는 방법

Jackson JSON을 사용하려고 합니다. 문자열을 사용하여 유효한 JSON인지 확인합니다.사용할 코드 샘플(Java)을 제안해 주실 수 있습니까?

이 사용 사례는 정확히 알 수 없지만, 이렇게 하면 됩니다.

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의 답변은 많은 요구를 충족시키겠지만, 몇 가지 문제가 있습니다.그 중 하나가 중복된 키입니다.다음 예를 들어보겠습니다.

String json = "{ \"foo\" : \"bar\", \"foo\" : \"baz\" }";

보충으로서, 다음의 코드로 중복되는 키가 없는지를 확인할 수 있습니다.

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
objectMapper.readTree(json);

던지다JsonProcessingException중복된 키 또는 기타 오류에 대해주세요.

잭슨에서는 다음 기능을 사용합니다.

public static boolean isValidJSON(final String json) throws IOException {
    boolean valid = true;
    try{ 
        objectMapper.readTree(json);
    } catch(JsonProcessingException e){
        valid = false;
    }
    return valid;
}

Bean Validation API를 별도로 사용하는 이 좋습니다.즉, 먼저 데이터를 POJO에 바인드한 후 POJO를 검증합니다.데이터 포맷레벨의 스키마는 그다지 유용하지 않다고 생각합니다.보통 높은 레벨의 문제를 검증할 필요가 있어 스키마 언어 자체가 서투릅니다.특히 검증되고 있는 포맷을 사용하는 언어(XML Schema와 JSON Schema 모두 이 기본적인 결함이 있습니다).이렇게 하면 코드가 모듈화되고 재사용이 가능하며 문제가 분리됩니다(시리얼라이제이션, 데이터 검증).

한 걸음 더 나아가 DropWizard를 보시기 바랍니다.DropWizard는 잭슨과 Validation API 구현(Hibernate 프로젝트)을 통합하고 있습니다.

private boolean isValidJson(String json) {
    try {
        objectMapper.readTree(json);
    } catch (JsonProcessingException e) {
        return false;
    }
    return true;
}

다른 옵션은 java.util을 사용하는 것입니다.Java 8에서는 옵션입니다.이것에 의해, 오브젝트를 반환해, 발신자 코드로 보다 기능적인 어프로치를 사용할 수 있습니다.

이것은 다른 가능한 구현입니다.

public Optional<JsonProcessingException> validateJson(final String json) {
    try{ 
        objectMapper.readTree(json);
        return Optional.empty();
    } catch(JsonProcessingException e){
        return Optional.of(e);
    } catch(IOException e) {
        throw new RuntimeException(e);
    }
}

다음으로 다음과 같은 방법을 사용할 수 있습니다.

jsonHelper.validateJson(mappingData.getMetadataJson())
                    .map(e -> String.format("Error: %s at %s", e.getMessage(), e.getLocation().toString()))
                    .orElse("Valid JSON");

다른 답변의 검증

public static boolean isValidJSON(final String json) throws IOException {
    boolean valid = true;
    try{ 
        mapper.enable(DeserializationFeature.FAIL_ON_TRAILING_TOKENS);
        mapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
        objectMapper.readTree(json);
    } catch(JsonProcessingException e){
        valid = false;
    }
    return valid;
}

언급URL : https://stackoverflow.com/questions/10226897/how-to-validate-json-with-jackson-json

반응형