Sto cercando di utilizzare Jackson JSON per prendere una stringa e determinare se è JSON valido. Qualcuno può suggerire un esempio di codice da utilizzare (Java)?Come convalidare JSON con Jackson JSON
risposta
Non sei sicuro di ciò che il vostro caso d'uso di questo è, ma questo dovrebbe farlo:
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() è deprecato. – Arash
Qui è disponibile una soluzione breve ed elegante [Grazie a @pdem] (http://stackoverflow.com/a/29414638/452708) 'try { ObjectMapper objectMapper = ...; JsonNode jsonNode = objectMapper.readTree (yourJsonString); } catch (JsonProcessingException e) {........} ' – Abhijeet
entrambi i metodi sono deprecati: getJsonFactory(). CreateJsonParser (json). Utilizzare questa istanza: getFactory(). CreateParser (json) – kiedysktos
mi consiglia di utilizzare Bean Validation API separatamente: cioè, primi dati associare a un POJO, quindi convalidare POJO. Livello di formato dei dati Gli schemi non sono molto utili a mio avviso: uno di solito deve ancora convalidare i problemi di livello superiore, e i linguaggi di schema sono goffi, specialmente. quelli che utilizzano il formato in fase di convalida (XML Schema e JSON Schema hanno entrambi questo difetto di base). Fare ciò rende il codice più modulare, riutilizzabile e separa i problemi (serializzazione, convalida dei dati).
Ma vorrei davvero andare un passo oltre, e vi consiglio di dare un'occhiata al DropWizard - Integra implementazione dell'API Jackson e Validazione (dal progetto Hibernate).
Dropwizard sembra essere passato a una nuova casa (www.dropwizard.io) e si chiama ora "un framework Java per lo sviluppo di un web RESTful efficiente e ad alte prestazioni Servizi".Non ho letto ma potrebbe ancora integrare Jackson e l'API di validazione. Non sono sicuro se hai bisogno di tutto il resto. – Wivani
Sì, DropWizard integra ancora l'API Jackson e Validation sin d'ora (febbraio 2016). Non vedo quelli che cambiano per il progetto, è abbastanza maturo a questo punto. Ovviamente è possibile utilizzare altre librerie di binding (JAX-RS è altamente collegabile), ma come base di partenza queste 2 librerie rimarranno probabilmente. – StaxMan
Anche se la risposta di Perception probabilmente si adatta molti bisogni, ci sono alcuni problemi che non prenderà, uno di loro è chiavi duplicate, si consideri il seguente esempio:
String json = "{ \"foo\" : \"bar\", \"foo\" : \"baz\" }";
Come complemento, è possibile verificare la presenza di chiavi duplicate con il seguente codice:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
objectMapper.readTree(json);
Si getta JsonProcessingException
sulla chiave duplicata o altro errore.
con Jackson Io uso questa funzione:
public static boolean isValidJSON(final String json) throws IOException {
boolean valid = true;
try{
objectMapper.readTree(json);
} catch(JsonProcessingException e){
valid = false;
}
return valid;
}
Un'altra opzione sarebbe utilizzando java.util.Optional in Java 8. Questo permette di restituire un oggetto e di utilizzare nel codice chiamante un approccio più funzionale.
Questo è un altro possibile implementazione:
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);
}
}
Quindi è possibile utilizzare questo metodo come questo:
jsonHelper.validateJson(mappingData.getMetadataJson())
.map(e -> String.format("Error: %s at %s", e.getMessage(), e.getLocation().toString()))
.orElse("Valid JSON");
- 1. Rimozione elementi JSON con jackson
- 2. Deserializzazione JSON personalizzata con Jackson
- 3. Duplicate JSON Field con Jackson
- 4. Convalidare JSON da Mongo?
- 5. Convalidare json in php
- 6. Aggiungere una proprietà a una stringa json con jackson json
- 7. Jackson ObjectMapper con chiavi JSON arbitrarie
- 8. Jackson JSON non funziona con CXF
- 9. Jackson - De-Serialize JSON con dinamica chiave
- 10. Deserializzazione Jackson JSON con Elemento di radice
- 11. Deserializzare solo determinati tag JSON con Jackson
- 12. Jackson: custom collection serializzazione JSON
- 13. Data Mapping a JSON Jackson
- 14. Jackson legge json nell'elenco generico
- 15. JAXB per JSON utilizzando JACKSON
- 16. Java JSON -Jackson- Elementi nidificati
- 17. JSON Jackson condivisa fa riferimento
- 18. convalida quando si decodifica JSON utilizzando Jackson
- 19. Converti JSON molti oggetti a singolo JSON utilizzando Jackson
- 20. Come convalidare un oggetto JSON in java?
- 21. Jersey/Jackson: come catturare l'eccezione JSON?
- 22. Come passare raw JSON tramite Jackson?
- 23. Jackson Deserialize variabile come JSON String
- 24. Come configurare PROGUARD per Jackson JSON Processor?
- 25. Come creare questa stringa json usando Jackson?
- 26. Come convalidare un modulo utilizzando JSON Schema?
- 27. Jackson JSON: ottiene il nome del nodo da json-tree
- 28. Jackson Json View per la deserializzazione
- 29. Polymorphism in JSON, Jersey e Jackson
- 30. JSON serializzazione di enumerazioni Scala utilizzando Jackson
Come fai a Defina che JSON è valida? – Slavus
@Slavus: qualsiasi stringa che soddisfi lo standard di sintassi JSON è un JSON valido. Non definiamo un JSON valido. – Vivek
Sono in ritardo di anni e questo potrebbe non essere stato disponibile nel 2012, ma stai pensando a [schema JSON] (http://json-schema.org/)? – Stroboskop