it-swarm.com.de

Java prüft, ob eine Zeichenfolge gültiges JSON oder gültiges XML oder kein XML ist

Ich schreibe eine Funktion, um zu überprüfen, ob die Eingabezeichenfolge gültiges JSON oder gültiges XML oder keines von beiden ist. Ich habe einen Beitrag hier gefunden. Natürlich sind die Antworten im Posting falsch, da sie nur prüfen, ob die Zeichenfolge mit < oder { beginnt. Dies kann nicht garantieren, dass die Zeichenfolge gültig JSON oder gültig XML ist. 

Ich habe selbst eine Lösung, nämlich:

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;
}

Ich frage mich, ob es eine bessere oder kürzere Lösung gibt? Vielen Dank.

5
6324

sie haben Recht, um wirklich zu sehen, ob etwas Json oder XML ist, müssen Sie es als solches analysieren und analysieren - es gibt keine "flache Zeichenfolge" -Lösung (siehe sehr bekannte verwandte Frage hier )

der einzige Bereich, an den ich hier denken könnte, ist die Performance des Parsings:

  1. es scheint, als würden Sie einen Json-Parser verwenden, der einen DOM-Baum erzeugt. Das bedeutet, dass Sie mit einem Objektbaum im Speicher enden, der den Json darstellt, wenn Sie nur sehen wollten, ob der Json gültig ist oder nicht. Mit Streaming-Json (siehe hier ) können Sie mit einem geringeren Speicheraufwand die gleichen Ergebnisse erzielen (es wird kein Baum erstellt).
  2. ich weiß nicht, was ParseXML tut, aber es ist wahrscheinlich das gleiche Problem wie oben
3
radai

Zunächst einmal denke ich nicht, dass Sie den Code für die JSON- oder XML-Validierung neu erfinden müssen. Es ist bereits verfügbar, getestet und ziemlich optimiert.

Bei JSON: Können Sie JSONObject von Here verwenden. Hier ist Demo darüber.

Im Falle von XML : Sie sollten wahrscheinlich einen DocumentBuilder verwenden, wenn Sie das wohlgeformte XML prüfen möchten. Demo:

    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(XmlSourceFile);

Versuchen Sie es mit dem Parsen. Wenn dies nicht fehlschlägt, können Sie mit XML arbeiten. Versuchen Sie überladene Methoden von dBuilder.parse() entsprechend Ihrer Eignung 

2
Preetam Kumar

hier würde ich es tun ..

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
    }
0