Я пытаюсь использовать Jackson JSON взять строку и определить, действительно ли она JSON. Может ли кто-нибудь предложить образец кода для использования (Java)?
Как проверить JSON с Jackson JSON
Ответ 1
Не уверен, что ваш вариант использования для этого, но это должно сделать это:
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;
}
Ответ 2
Хотя ответ Perception, вероятно, будет соответствовать многим потребностям, есть некоторые проблемы, которые он не поймает, один из них является дубликатными ключами, рассмотрим следующий пример:
String json = "{ \"foo\" : \"bar\", \"foo\" : \"baz\" }";
В качестве дополнения вы можете проверить дубликаты ключей со следующим кодом:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
objectMapper.readTree(json);
Он бросает JsonProcessingException
на дубликат ключа или другую ошибку.
Ответ 3
Я бы рекомендовал использовать Bean API проверки отдельно: то есть сначала привязать данные к POJO, а затем проверить POJO. Уровень данных. Схемы, на мой взгляд, не очень полезны: обычно обычно приходится проверять проблемы более высокого уровня, а сами языки схем неуклюжи, особенно. которые используют проверенный формат (схема XML и схема JSON имеют этот основной недостаток). Это делает код более модульным, многоразовым и разделяет проблемы (сериализация, проверка данных).
Но я бы сделал еще один шаг вперед и предложил вам взглянуть на DropWizard - он интегрирует API Jackson и Validation (из проекта Hibernate).
Ответ 4
С помощью Jackson я использую эту функцию:
public static boolean isValidJSON(final String json) throws IOException {
boolean valid = true;
try{
objectMapper.readTree(json);
} catch(JsonProcessingException e){
valid = false;
}
return valid;
}
Ответ 5
Другим вариантом будет использование java.util.Optional в 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");
Ответ 6
Изучение других ответов
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;
}