Jackson JSON bir dize almaya çalışıyorum ve geçerli bir JSON olup olmadığını belirlemeye çalışıyorum. Kullanmak için bir kod örneği önerebilir (Java)?JSON ile JSON Nasıl Doğrulanır JSON
cevap
bunun için bir kullanım durumu ne olduğundan emin değil, ama bunu yapmalısınız:
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() kullanımdan kaldırılmıştır. – Arash
Kısa ve zarif bir çözüm şu adrestedir: [@pdem'e teşekkürler] (http://stackoverflow.com/a/29414638/452708) 'deneyin { ObjectMapper objectMapper = ...; JsonNode jsonNode = objectMapper.readTree (yourJsonString); } catch (JsonProcessingException e) {........} ' – Abhijeet
her iki yöntem de amorti edilir: getJsonFactory(). CreateJsonParser (json). Kullanmak için bunu kullanın: getFactory() .Parser (json) – kiedysktos
ayrı ayrı Bean Validation API kullanarak öneriyoruz: yani, bir POJO ilk bağlama verisi ardından POJO doğrulamak edilir. Veri formatı seviyesi Şemalar bence çok faydalı değil: genellikle daha yüksek seviyedeki endişeleri doğrulamak zorunda kalıyor ve şema dilleri kendiliğinden saklı. formatı doğrulananlar kullanılır (XML Şeması ve JSON Şeması'nın her ikisi de bu temel kusura sahiptir). Bunu yapmak kodu daha modüler hale getirir, tekrar kullanılabilir hale getirir ve endişeleri ayırır (serileştirme, veri doğrulama).
Ama aslında bir adım daha ileri gidip DropWizard'a bir göz atmanızı öneririm - Jackson ve Validation API uygulamasını (Hazırda Bekletme projesinden) bütünleştirir. Algı cevabı muhtemelen birçok ihtiyaçlarına uygun olsa da
Dropwizard yeni bir eve taşınmış gibi görünüyor (www.dropwizard.io) ve şu anda çağrı yapıyor "ops dostu, yüksek performanslı, RESTful web geliştirmek için bir Java çerçevesi Hizmetler".Okumadım ama muhtemelen Jackson ve Validation API'yi entegre ediyor. Geri kalanına ihtiyacınız olup olmadığından emin değilim. – Wivani
Evet, DropWizard halen Jackson ve Validation API'sini şu an itibariyle entegre ediyor (Şubat 2016). Projeyi değiştirenleri görmüyorum, bu noktada oldukça olgun. Tabii ki diğer ciltleme kütüphanelerini de kullanabilirsiniz (JAX-RS son derece takılabilir), fakat temel olarak bu 2 libl muhtemelen kalacaktır. – StaxMan
, bu yakalayamazlar bazı sorunlar var, bunlardan biri yinelenen anahtarlar, şu örneği düşünün geçerli: tamamlayıcı olarak
String json = "{ \"foo\" : \"bar\", \"foo\" : \"baz\" }";
, sizin için kontrol edebilirsiniz aşağıdaki kod ile anahtarları çoğaltmak: Bu yinelenen anahtar veya diğer hata JsonProcessingException
atar
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
objectMapper.readTree(json);
.
public static boolean isValidJSON(final String json) throws IOException {
boolean valid = true;
try{
objectMapper.readTree(json);
} catch(JsonProcessingException e){
valid = false;
}
return valid;
}
bu işlevi kullanın.
Bu da başka bir olası uygulamasıdır:
jsonHelper.validateJson(mappingData.getMetadataJson())
.map(e -> String.format("Error: %s at %s", e.getMessage(), e.getLocation().toString()))
.orElse("Valid JSON");
Diğer bir seçenek Bu bir nesneyi döndürmek için ve arama kodu daha işlevsel bir yaklaşım içinde kullanmasını sağlar Java 8'de java.util.Optional kullanarak olurdu: Jackson ile
JSON geçerli olduğunu DeFina nasıl:
Sonra böyle bu yöntemi kullanabilir? – Slavus
@Slavus: JSON sözdizimi standardını karşılayan herhangi bir dizgi geçerli bir JSON'dur. Geçerli bir JSON tanımlamıyoruz. – Vivek
Yıllar geç kaldım ve bu 2012 yılında mevcut olmayabilir, ancak [JSON şeması] (http://json-schema.org/) düşünüyor musunuz? – Stroboskop