我正在编写一个函数来检查输入字符串是有效的JSON还是有效的XML,或者两者都没有。我找到了一篇帖子here。但显然帖子中的答案不正确,因为他们只检查字符串是以<
还是{
开头,这不能保证字符串有效 JSON或有效 XML。
我自己有一个解决方案,即:
public static String getMsgType(String message) {
try {
new ObjectMapper().readTree(message);
log.info("Message is valid JSON.");
return "JSON";
} catch (IOException e) {
log.info("Message is not valid JSON.");
}
try {
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(message)));
log.info("Message is valid XML.");
return "XML";
} catch (Exception e) {
log.info("Message is not valid XML.");
}
return null;
}
我想知道是否有更好或更短的解决方案?感谢。
答案 0 :(得分:3)
你是对的,要真正看到某些东西是json还是xml,你必须尝试并解析它 - 没有&#34;扁平字符串&#34;解决方案(见非常着名的相关问题here)
我能想到的唯一改进方面是解析的性能:
答案 1 :(得分:2)
首先,我不认为你必须重新发明JSON或XML验证的代码。它已经可用,经过充分测试并且已经过优化。
如果是JSON: 您可以使用Here中的JSONObject。这是demo。
如果是XML :如果要检查格式良好的XML,则应该使用DocumentBuilder 。演示:
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(XmlSourceFile);
尝试解析,如果没有失败,你就可以使用XML了。尝试
根据您的适用性重载dBuilder.parse()
方法
答案 2 :(得分:0)
这是我要怎么做..
To validate if a string is JSON
//isValidJson = false;
/*try
{
Gson gs = new Gson();
Object ob = gs.ToJson(yourStringToValidate)
isValidJson = true;
}
catch
{
//do nothing
}
isValidXML = false;
/*try
{
//using JAXB try converting to a Java object
JAXBContext jaxbContext = JAXBContext.newInstance(Object.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Object obj = (Object) unmarshaller.unmarshal(YourString/Fileobj);
isValidXML = true;
}
catch
{
//do nothing
}