我想使用傑克遜JSON採取一個字符串,並確定它是否是有效的JSON。任何人都可以建議使用代碼示例(Java)?如何驗證JSON與傑克遜JSON
回答
不知道您的使用情況下這是什麼,但是這應該這樣做:
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()已棄用。 – Arash 2015-06-23 05:38:44
簡短而優雅的解決方案可以在這裏找到[感謝@pdem](http://stackoverflow.com/a/29414638/452708) '嘗試{0} {0} {0} ObjectMapper objectMapper = ...; JsonNode jsonNode = objectMapper.readTree(yourJsonString); (JsonProcessingException e){........}' – Abhijeet 2015-11-17 11:43:00
這兩種方法折舊:getJsonFactory()。createJsonParser(json)。 使用此istead:getFactory()。createParser(json) – kiedysktos 2016-12-23 07:51:03
我會建議分別使用Bean Validation API:即首先將數據綁定到一個POJO,然後再驗證POJO。數據格式級別Schema在我看來並不是非常有用:通常仍然需要驗證更高級別的問題,並且模式語言本身很笨拙,尤其是,那些使用格式被驗證的(XML Schema和JSON Schema都有這個基本缺陷)。這樣做可以使代碼更加模塊化,可重用,並分離問題(序列化,數據驗證)。
但我實際上會更進一步,並建議您看看DropWizard - 它集成了Jackson和Validation API實現(來自Hibernate項目)。
Dropwizard似乎已經搬到了新家(www.dropwizard.io),現在自稱「這是一個用於開發適用於操作系統的高性能RESTful web的Java框架服務」。還沒有閱讀,但它可能仍然集成了傑克遜和驗證API。不知道你是否需要休息。 – Wivani 2016-02-16 20:40:32
是的,截至目前爲止,DropWizard仍然集成了Jackson和Validation API(二月2016)。我沒有看到這個項目正在發生變化,現在已經很成熟了。您當然可以使用其他綁定庫(JAX-RS具有高度可插入性),但是作爲基線,這2個庫可能會保留。 – StaxMan 2016-02-24 17:09:15
雖然知覺的答案很可能會滿足衆多的需求,也有一些問題,它不會趕上,其中之一是重複鍵,請看下面的例子:
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;
}
另一種辦法是用Java 8.使用java.util.Optional這允許返回一個對象,在調用代碼中一個功能更強大的方法來使用。
這是一種可能的實現:
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");
- 1. JSON解析與傑克遜
- 2. 傑克遜JSON - 與IDS
- 3. 解析JSON與傑克遜
- 4. 傑克遜JSON類結構
- 5. 傑克遜JSON多態性
- 6. 春天mvc傑克遜json
- 7. 傑克遜JSON翻譯
- 8. JSON反序列化與傑克遜
- 9. Json通過Socket與傑克遜
- 10. 與傑克遜Java解析JSON
- 11. Java的JSON數組與傑克遜
- 12. 將JSON映射到POJO時的傑克遜驗證
- 13. 傑克遜:接受任何JSON
- 14. 傑克遜JSON:如果器具爲java.util.Set
- 15. 如何閱讀與反斜槓JSON與傑克遜
- 16. 與傑克遜
- 17. 與傑克遜
- 18. 如何與傑克遜
- 19. 如何反序列化與傑克遜解包的json?
- 20. 傑克遜json流API多個發生
- 21. Android傑克遜JSON解析器空值
- 22. 傑克遜JSON數組訪問
- 23. 傑克遜JSON處理器問題
- 24. 重寫JSON響應傑克遜
- 25. 傑克遜 - Deserialising JSON串 - TypeReference VS TypeFactory.constructCollectionType
- 26. 錯誤使用傑克遜和Json
- 27. 傑克遜json @JsonIgnore使用擴展類?
- 28. 傑克遜Json到POJO映射
- 29. JSON到JAVA對象由傑克遜
- 30. 傑克遜JSON數據流中的Android
你怎麼defina JSON是合法的? – Slavus 2012-04-19 12:13:18
@Slavus:任何滿足JSON語法標準的字符串都是有效的JSON。我們沒有定義有效的JSON。 – Vivek 2014-03-13 09:54:12
我遲到了,這可能在2012年不可用,但您是否想過[JSON模式](http://json-schema.org/)? – Stroboskop 2016-10-21 13:30:08