Estoy tratando de utilizar Jackson JSON tomar una cadena y determinar si es JSON válida. ¿Alguien puede sugerir una muestra de código para usar (Java)?Cómo validar JSON con Jackson JSON
Respuesta
No estoy seguro que su caso de uso para esto es, pero esto debe hacerlo:
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;
}
getJsonFactory() está en desuso. – Arash
Solución corta y elegante está disponible aquí [Gracias a @pdem] (http://stackoverflow.com/a/29414638/452708) 'try { ObjectMapper objectMapper = ...; JsonNode jsonNode = objectMapper.readTree (yourJsonString); } catch (JsonProcessingException e) {........} ' – Abhijeet
ambos métodos se han depreciado: getJsonFactory(). CreateJsonParser (json). Use this istead: getFactory(). CreateParser (json) – kiedysktos
Yo recomiendo usar Bean Validation API por separado: es decir, los primeros datos se unen a un POJO, a continuación, validar POJO. Nivel de formato de datos En mi opinión, los esquemas no son muy útiles: uno generalmente todavía tiene que validar las inquietudes de mayor nivel, y los propios lenguajes de esquema son torpes, especialmente. los que usan el formato que se valida (el Esquema XML y el Esquema JSON tienen este defecto básico). Al hacer esto, el código es más modular, reutilizable y separa las preocupaciones (serialización, validación de datos).
Pero en realidad iría un paso más allá, y sugiero que eche un vistazo a DropWizard - integra la implementación de Jackson y la API de validación (del proyecto Hibernate).
Dropwizard parece haberse trasladado a un nuevo hogar (www.dropwizard.io) y se llama a sí mismo ahora "un marco de Java para desarrollar una web RESTful amigable, de alto rendimiento y de alto rendimiento servicios".No he leído, pero posiblemente todavía integra Jackson y la API de validación. No estoy seguro de si necesitas todo el resto. – Wivani
Sí, DropWizard aún integra Jackson y la API de validación a partir de ahora (feb 2016). No veo esos cambios para el proyecto, es bastante maduro en este momento. Por supuesto, puede utilizar otras bibliotecas de enlace (JAX-RS es altamente conectable), pero como línea de base esas 2 bibliotecas probablemente se mantendrán. – StaxMan
Aunque la respuesta de Percepción probablemente encajará muchas necesidades, hay algunos problemas que no cogerá, uno de ellos es duplicados de las llaves, consideremos el siguiente ejemplo:
String json = "{ \"foo\" : \"bar\", \"foo\" : \"baz\" }";
Como complemento, se puede comprobar si hay duplicar llaves con el siguiente código:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
objectMapper.readTree(json);
Se lanza JsonProcessingException
el duplicado de la llave u otro error.
Con Jackson puedo utilizar esta función:
public static boolean isValidJSON(final String json) throws IOException {
boolean valid = true;
try{
objectMapper.readTree(json);
} catch(JsonProcessingException e){
valid = false;
}
return valid;
}
Otra opción sería utilizar java.util.Optional en Java 8. Esto permite devolver un objeto y para usar en el código de llamada un enfoque más funcional.
Ésta es otra aplicación posible:
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);
}
}
continuación, puede utilizar este método como este:
jsonHelper.validateJson(mappingData.getMetadataJson())
.map(e -> String.format("Error: %s at %s", e.getMessage(), e.getLocation().toString()))
.orElse("Valid JSON");
- 1. Jackson JSON + Java Generics
- 2. JSON Jackson referencias compartidas
- 3. Jackson - JSON para POJO con entradas múltiples
- 4. Deserialización de Jackson JSON con Root Element
- 5. Jackson ObjectMapper con claves JSON arbitrarias
- 6. Fusionando dos documentos JSON con Jackson
- 7. Deserializar solo ciertas etiquetas JSON con Jackson
- 8. Serialized JSON con claves clasificadas, usando Jackson
- 9. Java JSON -Jackson- Elementos anidados
- 10. JAXB a JSON usando JACKSON
- 11. Validar json en php
- 12. ¿Cómo crear esta cadena json usando Jackson?
- 13. Cómo deserializar el siguiente JSON usando Jackson
- 14. Jackson JSON: obtener el nombre de nodo de json-tree
- 15. Deserialización de JSON en objetos con métodos sobrecargados con Jackson
- 16. Crear estructura JSON simple usando Jackson
- 17. Vista de Jackson Json para la deserialización
- 18. Jackson Deserialize variable como JSON cadena
- 19. parte de una cadena JSON usando Jackson
- 20. Polimorfismo en JSON, Jersey y Jackson
- 21. ¿Jackson JSON tiene un escape especial?
- 22. ALLOW_UNQUOTED_FIELD_NAMES en la biblioteca jackson JSON
- 23. Jackson JSON, clases inmutables e interfaces
- 24. json parse rendimiento entre jackson y gson
- 25. Jackson - Deserialising JSON cadena - typereference vs TypeFactory.constructCollectionType
- 26. Jackson JSON convierte enteros en cadenas
- 27. JSON Serializar JDK proxy dinámico con la biblioteca de Jackson
- 28. codificación jackson - json de dobles con precisión controlada
- 29. Deserialización personalizada de JSON FIELD con Jackson en java?
- 30. de validación cuando se decodifica usando JSON Jackson
¿Cómo DeFina que JSON es válida? – Slavus
@Slavus: Cualquier cadena que satisfaga el estándar de sintaxis JSON es un JSON válido. No definimos un JSON válido. – Vivek
Llegué tarde y es posible que no haya estado disponible en 2012, pero ¿está pensando en [esquema JSON] (http://json-schema.org/)? – Stroboskop