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

     2023-02-26     48

关键词:

【中文标题】Java 检查字符串是有效的 JSON 还是有效的 XML,或者两者都不是【英文标题】:Java check if a string is valid JSON or valid XML or neither 【发布时间】:2017-09-09 22:27:39 【问题描述】:

我正在编写一个函数来检查输入字符串是有效的 JSON 还是有效的 XML,或者两者都不是。我找到了一个帖子here。但显然帖子中的答案是不正确的,因为他们只检查字符串是否以< 开头,不能保证字符串是valid JSON 或valid 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;

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

【问题讨论】:

【参考方案1】:

首先,我认为您不必为 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() 的重载方法根据你的适合性来

【讨论】:

XML Validator 根据指定模式测试给定文档。这样的验证在这里是不必要的,因为 OP 要求解析给定的字符串以检查给定的字符串是 JSON 还是 XML,简单地说只是进行简单的令牌解析。 感谢您的回答。在我的情况下,XmlSourceFile 是一个字符串,所以我会将XmlSourceFile 替换为new InputSource(new StringReader(XmlSourceFile) 可以通过 InputStream 解析字符串。 dBuilder.parse(new ByteArrayInputStream(strXML.getBytes("UTF-8")));【参考方案2】:

您说得对,要真正查看是 json 还是 xml,您必须尝试解析它 - 没有“扁平字符串”解决方案(请参阅非常著名的相关问题 here)

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

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

【讨论】:

感谢您的回答。我刚刚尝试过使用 JSON 和 XML 流。看起来 JSON 流解析器会将无效的 JSON/XML 识别为 JSON,而 XML 流解析器会将无效的 JSON/XML 识别为 XML。所以当我同时使用两个流解析器时会出现问题。我目前的解决方案虽然有效。但是你指出了我不知道的关键点。这可能会在将来对我有所帮助。 @Yilong - 有多个流式 xml 和 json 解析器,每个都有自己的配置选项。如果它们都不能配置得更严格并发出错误事件/异常,我会感到惊讶,但我自己从来没有这样做过,所以我不确定。【参考方案3】:

这就是我会怎么做..

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
    

【讨论】:

检查字符串是不是是 Typescript 中的有效 JSON

】检查字符串是不是是Typescript中的有效JSON【英文标题】:CheckifastringisavalidJSONinTypescript检查字符串是否是Typescript中的有效JSON【发布时间】:2022-01-1921:00:06【问题描述】:有很多关于如何在Javascript中执行此操作的资料,但在Types... 查看详情

如何在 Python 中检查字符串是不是是有效的 JSON?

】如何在Python中检查字符串是不是是有效的JSON?【英文标题】:HowdoIcheckifastringisvalidJSONinPython?如何在Python中检查字符串是否是有效的JSON?【发布时间】:2011-07-2709:10:04【问题描述】:在Python中,有没有办法在尝试解析字符串之... 查看详情

使用 jq 检查字符串是不是是有效的 JSON

】使用jq检查字符串是不是是有效的JSON【英文标题】:CheckifstringisavalidJSONwithjq使用jq检查字符串是否是有效的JSON【发布时间】:2018-04-0720:35:37【问题描述】:我需要在解除服务时发现错误。响应可以是null,类似的字符串错误信... 查看详情

java中检查字符串是否是有效日期

讨论在Java中检查一个字符串是否包含有效日期的各种方法,包括Java8之前与Java8之后及ApacheCommonsValidator的解决方案。讨论在Java中检查一个字符串是否包含有效日期的各种方法,包括Java8之前与Java8之后及ApacheCommonsValidator的解决方... 查看详情

java示例代码_检查(字符串)位置在Java中是否是有效的保存路径

java示例代码_检查(字符串)位置在Java中是否是有效的保存路径 查看详情

Laravel 验证:必须是带有“json”规则的有效 JSON 字符串

】Laravel验证:必须是带有“json”规则的有效JSON字符串【英文标题】:Laravelvalidation:MustbeavalidJSONstringwiththe"json"rule【发布时间】:2021-02-2719:10:45【问题描述】:我正在制作LaravelAPI,但我似乎无法在其中一篇文章中发送JSON... 查看详情

javascript检查提供的参数是否是有效的json(代码片段)

查看详情

最低有效 JSON 是多少?

...n.org/,但我不确定我是否知道这个简单问题的答案。什么字符串是最小可能的有效JSON?"string"字符串是有效的JSON吗?42是简单数字有效的JSON吗?true的布尔值是有效的JSON吗?空对象是有效的J 查看详情

检查来自 API 的响应是不是为有效 JSON

】检查来自API的响应是不是为有效JSON【英文标题】:CheckifresponsefromAPIisvalidJSON检查来自API的响应是否为有效JSON【发布时间】:2012-03-2922:00:40【问题描述】:NSJSONSerialization有没有办法检查NSData是否是有效的JSON?如果API由于某种... 查看详情

java示例代码_检查日期字符串的有效性

java示例代码_检查日期字符串的有效性 查看详情

检查字符串是不是是有效的 Windows 目录(文件夹)路径

】检查字符串是不是是有效的Windows目录(文件夹)路径【英文标题】:CheckifastringisavalidWindowsdirectory(folder)path检查字符串是否是有效的Windows目录(文件夹)路径【发布时间】:2011-03-0909:40:03【问题描述】:我正在尝试确定用户... 查看详情

检查字符串是不是是十六进制数的有效表示

】检查字符串是不是是十六进制数的有效表示【英文标题】:Checkifstringisvalidrepresentationofhexnumber检查字符串是否是十六进制数的有效表示【发布时间】:2014-11-1400:41:57【问题描述】:对于regex,我完全是菜鸟。我的目标是检查字... 查看详情

如何检查字符串是不是是android中的有效电子邮件? [复制]

】如何检查字符串是不是是android中的有效电子邮件?[复制]【英文标题】:Howtocheckifastringisavalidemailinandroid?[duplicate]如何检查字符串是否是android中的有效电子邮件?[复制]【发布时间】:2019-10-0610:48:34【问题描述】:我正在尝试... 查看详情

如何使用 JSON.NET 确保字符串是有效的 JSON

】如何使用JSON.NET确保字符串是有效的JSON【英文标题】:HowtomakesurethatstringisvalidJSONusingJSON.NET【发布时间】:2013-02-0508:03:53【问题描述】:我有一个原始字符串。我只想验证字符串是否是有效的JSON。我正在使用JSON.NET。【问题讨... 查看详情

如何在Objective-C中检查输入是双精度还是字符串?

】如何在Objective-C中检查输入是双精度还是字符串?【英文标题】:HowtocheckifinputisdoubleorstringinObjective-C?【发布时间】:2012-07-0614:23:48【问题描述】:如何检查给定的输入是字符串还是双精度?我尝试做[self.display.textdoubleValue],... 查看详情

Nodejs检查给定的字符串是不是是有效的文件系统路径而不实际检查文件系统

】Nodejs检查给定的字符串是不是是有效的文件系统路径而不实际检查文件系统【英文标题】:NodejscheckifthegivenstringisavalidfilesystempathwithoutactuallycheckingthefilesystemNodejs检查给定的字符串是否是有效的文件系统路径而不实际检查文件... 查看详情

检查字符串是不是为有效 URL 的最佳正则表达式是啥?

】检查字符串是不是为有效URL的最佳正则表达式是啥?【英文标题】:WhatisthebestregularexpressiontocheckifastringisavalidURL?检查字符串是否为有效URL的最佳正则表达式是什么?【发布时间】:2010-10-2410:11:40【问题描述】:如何检查给定... 查看详情

如何判断一个字符串是不是是有效的 JSON?

】如何判断一个字符串是不是是有效的JSON?【英文标题】:HowtodeterminewhetherastringisvalidJSON?如何判断一个字符串是否是有效的JSON?【发布时间】:2010-11-1407:50:45【问题描述】:有谁知道PHP的健壮(和防弹)is_JSON函数sn-p吗?我(... 查看详情