检查字符串是否包含XML或JSON数据

10

我收到一个包含XML或JSON内容的字符串。

如果字符串包含JSON内容,我使用Jackson(Java API)将JSON转换为Java对象

如果它包含XML内容,我使用JAXB将XML内容转换为Java对象(取消编组)。

我如何检查我接收到的字符串是XML还是JSON?

2个回答

15
XML文档实体(通常指XML文档)必须以"<"开头。
根据ECMA-404规定,JSON文本以零个或多个空格字符开头,后跟以下之一:
{ [ " 0-9 - true false null

所以您最简单的方法就是测试 if(s.startsWith("<")

它如何验证是否为有效的Xml或JSon? - Wil Ferraciolli
评论不应用于补充问题,尤其是在原始答案6年后。请提出一个新问题。 - Michael Kay

6
如果你已知该字符串的编码(或者是ASCII或UTF),那么仅查看该字符串的第一个字符就足够了。
如果该字符串以以下方式开头:
- 以<开头,那么它是XML结构。 - 以{[其他允许的起始字符开头,那么它是JSON结构。
对于JSON,您还需要在查看“第一个”字符之前去除空格(如果您接收到的字符串可能包含额外的空格)。
虽然JSON数据结构以nulltruefalse开头是合法的,但如果您已经了解一些有关您的数据结构的信息,可以避免这些情况。
因此,基本上您可以检查第一个字符是否为<,如果是,则将其视为XML。在其他情况下,将其视为JSON,并让jackson在不合法的JSON语法时引发一些异常。

2
JSON 也可以以 [ 开头。 - bdoughan
1
好的,我通常只看到 {,但其他符号也是允许的,我会相应地更新答案。 - Matthias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接