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

Java检查字符串是有效的JSON还是有效的XML,或者两者都不是,java,json,xml,Java,Json,Xml,我正在编写一个函数来检查输入字符串是有效的JSON还是有效的XML,或者两者都不是。我找到一个帖子。但很明显,帖子中的答案是不正确的,因为它们只检查字符串是否以开头。要真正了解某个内容是json还是xml,您必须尝试将其解析为json或xml,但没有“平面字符串”解决方案(请参阅非常著名的相关问题) 在这里,我能想到的唯一改进领域是解析的性能: 看起来您正在使用一个生成DOM树的json解析器。这意味着您将在内存中得到一个表示json的对象树,而您只想看看它是否有效。使用流式json(请参阅)可

我正在编写一个函数来检查输入字符串是有效的JSON还是有效的XML,或者两者都不是。我找到一个帖子。但很明显,帖子中的答案是不正确的,因为它们只检查字符串是否以
开头。要真正了解某个内容是json还是xml,您必须尝试将其解析为json或xml,但没有“平面字符串”解决方案(请参阅非常著名的相关问题)

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

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

  • 首先,我认为您不必重新设计JSON或XML验证的代码。它已经可用,经过良好的测试和优化

    如果是JSON: 您可以从中使用JSONObject。在这上面

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

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(XmlSourceFile);
    
    尝试解析,如果它没有失败,您就可以很好地使用XML。尝试
    dBuilder.parse()

    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
        }
    

    XML验证程序根据指定的模式测试给定文档。这种验证在这里是不必要的,因为OP要求解析给定的字符串以检查给定的字符串是JSON还是XML,简单地说就是进行简单的令牌解析。谢谢您的回答。在我的例子中,
    XmlSourceFile
    是一个字符串,所以我将用
    newinputsource(newstringreader(XmlSourceFile)
    替换
    XmlSourceFile
    。您可以通过InputStream解析字符串。
    dBuilder.parse(newbytearrayinputstream(strXML.getBytes(“UTF-8”))
    谢谢你的回答。我刚刚尝试了JSON和XML流。看起来JSON流解析器会将无效的JSON/XML识别为JSON,而XML流解析器会将无效的JSON/XML识别为XML。因此,当我同时使用这两个流解析器时,会出现问题。不过,我目前的解决方案是可行的。但你已经指出了关键点nts,我不知道。这可能在将来对我有帮助。@Yilong-有多个流式xml和json解析器,每个解析器都有自己的配置选项。如果没有一个可以配置得更严格并发出错误事件/异常,我会感到惊讶,但我自己从来没有这样做过,所以我不确定。
    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
        }