入力文字列が有効なJSONか有効なXMLか、またはどちらでもないかどうかをチェックする関数を書いています。私は投稿を見つけました ここ 。ただし、文字列が<
または{
で始まるかどうかのみをチェックするため、投稿の回答は間違いです。文字列がvalidJSONまたはvalidXML。
私は自分自身で解決策を持っています:
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;
}
より良いまたはより短い解決策があるかどうか私は思っていますか?ありがとう。
何かがjsonまたはxmlであるかどうかを実際に確認するには、それを試して解析する必要があります-これに対する「フラット文字列」の解決策はありません(非常に有名な関連質問 here を参照)
ここで私が考えることができる唯一の改善領域は、解析のパフォーマンスです。
まず第一に、JSONまたはXML検証のコードを再発明する必要があるとは思いません。それはすでに利用可能で、十分にテストされ、非常に最適化されています。
JSONの場合:ここ からJSONObjectを使用できます。これが demo です。
XMLの場合:整形式のXMLを確認する場合は、おそらく DocumentBuilder を使用する必要があります。デモ:
_ 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
}