Java检查字符串是有效的JSON还是有效的XML,或者两者都不是

632*_*324 9 java xml json

我正在编写一个函数来检查输入字符串是有效的JSON还是有效的XML,或者两者都没有.我在这里发了一个帖子.但显然帖子中的答案是不正确的,因为它们只检查字符串是否以<或开头{,这不能保证字符串是有效的 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;
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好或更短的解决方案?谢谢.

Pre*_*mar 7

首先,我认为您不必重新编写 JSON 或 XML 验证的代码。它已经可用,经过充分测试并且经过充分优化。

如果是 JSON: 您可以使用此处的 JSONObject 。这是有关该内容的演示

对于 XML :如果您想检查格式良好的 XML,您可能应该使用 DocumentBuilder 演示:

    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(XmlSourceFile);
Run Code Online (Sandbox Code Playgroud)

尝试解析,如果没有失败,那么您就可以使用 XML 了。dBuilder.parse()根据您的适合情况尝试重载方法


rad*_*dai 4

你是对的,要真正了解某些东西是 json 还是 xml,你必须尝试解析它 - 对此没有“扁平字符串”解决方案(请参阅此处非常著名的相关问题)

我在这里能想到的唯一改进领域是解析的性能:

  1. 看来您正在使用生成 DOM 树的 json 解析器。这意味着您最终会在内存中得到一个代表 json 的对象树,而您想要的只是查看它的 json 是否有效。使用流式 json (请参阅此处),您可以获得相同的结果,但内存开销较低(实际没有创建树)
  2. 我不知道 parseXML 是做什么的,但它可能遇到与上面相同的问题