잭슨 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
'programing' 카테고리의 다른 글
Angular에서 모달 창을 호출하는 중JavaScript를 사용하는 JS 부트스트랩 UI (0) | 2023.03.31 |
---|---|
도커 컨테이너의 디렉토리를 호스트에 마운트하는 방법 (0) | 2023.03.31 |
Angular.js 클릭 시 요소 css 클래스를 변경하고 다른 요소를 모두 삭제하는 방법 (0) | 2023.03.31 |
FormData 추가가 작동하지 않습니다. (0) | 2023.03.31 |
Woocommerce 숍 페이지에서 제품 변형 이미지 가져오기 (0) | 2023.03.31 |