Como muchos otros han señalado, Java no envía una biblioteca estándar de análisis JSON como parte del JDK, por lo que si desea utilizar tecnología JDK-bundled con absolutamente ninguna dependencia, tiene 3 opciones de análisis XML:
- XPathFactory - análisis basado en XPath. Lee todo el XML en una estructura de datos en memoria y le permite ejecutar consultas sobre ella usando XPath expression language. Esta es probablemente la memoria más lenta y más intensas, pero, una de las formas más convenientes para consultar sus datos.No deberías escribir una aplicación de negociación de acciones con esto, pero si solo necesitas datos de un gran archivo de configuración, es muy útil (aunque para las configuraciones, hay muchas otras librerías específicas para eso que son más fáciles de hacer que las tuyas) .
- DocumentBuilder - Análisis basado en DOM. Lee el XML completo en una estructura de datos en memoria que puede consultar y recorrer según sea necesario. La segunda más lenta y bastante intensa en memoria, pero necesaria si desea/necesita que el DOM XML se quede en la memoria para que pueda operar en él. También es útil si quieres leer, consultar, hacer cambios y escribir el DOM como un archivo XML modificado.
- SAXParser - Análisis basado en SAX. Casi el más rápido. Analiza a través de XML de arriba a abajo, llamando a métodos tropezados en su implementación ContentHandler (proporcionada en el tiempo de análisis) cada vez que se golpea el elemento apropiado. Básicamente es como una persona habladora que te dice todo lo que están haciendo COMO lo hacen. Depende de usted implementar los métodos apagados para hacer algo con los datos que le transmite tal como lo encuentra.
- XMLStreamReader - Método de análisis más rápido y utiliza la menor sobrecarga. Este es el nuevo hijo de oro del análisis XML en Java. Es similar a STAX, pero en lugar de llamar a métodos tropezados cada vez que encuentra algo nuevo, rasga el archivo XML y notifica a la persona que llama de su estado modificado cuando ve contenido nuevo pero no hace nada CON el contenido hasta que lo solicite . Por ejemplo, dirá algo así como "Ahora estoy mirando una etiqueta abierta ... ahora una etiqueta cerrada ... ahora algunos caracteres ... ahora un comentario ..." y a menos que solicite información sobre esos elementos que está golpeando (obtener atributos, caracteres, etc.) que en realidad nunca analiza y los procesa fuera de la secuencia, simplemente se saltea.
AHORA, dicho todo esto, trabajar con estas API especialmente si eres nuevo no es el más intuitivo del mundo. Si ya has analizado XML antes en Java, estarás bien.
Sin embargo, si CONSIDERA un pequeño JAR de 3 ª parte, voy a señalarle en mi Simple Java XML Parser (SJXP) library. Le brinda la facilidad de XPath con el rendimiento del análisis STAX; Honestamente (estoy siendo imparcial, en serio) - es increíble.
Pasé más de un año trabajando en esto mientras escribía un sistema de análisis de alimentación realmente sólido que comenzó como un sistema basado en SAX, luego se trasladó a STAX y cuanto más trabajaba en él, más me daba cuenta de lo fácil que era podría resumir el dolor de STAX con reglas simples.
Puede mirar el Usage example, pero esencialmente define reglas para que coincidan como "/ library/book/title" analizará todos los contenidos de su etiqueta; puede analizar los atributos y valores pares calificados nombre del espacio (si es compatible con los espacios de nombres también!)
Aquí es un ejemplo feed RSS analizador:
IRule linkRule = new DefaultRule(Type.CHARACTER, "/rss/channel/item/link") {
@Override
public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
// Also store the link, or something equivalently fancy
}
}
A continuación, sólo tiene que pasar esa regla al analizador cuando se crea que, de esta manera:
XMLParser parser = new XMLParser(linkRule);
y ya está; simplemente proporcione al analizador sus archivos XML a través del parse method y obtendrá devoluciones de llamadas cada vez que coincida con esa ruta.
He analizado, perfilado y optimizado la sobrecarga de la biblioteca sobre la cubierta de STAX hasta el punto de que es prácticamente inexistente. La coincidencia de parches real se realiza a través de códigos hash en caché, por lo que ni siquiera estoy haciendo comparaciones de cadenas dentro del analizador.
Es really fast y funciona en Android.
Si desea hacer JSON en su lugar, le recomiendo usar GSON. Jackson es más rápido, pero la API es 37 veces más compleja que la GSON API. Pasarás más tiempo averiguando exactamente qué clases necesitas usar en Jackson que con GSON.
También desde la última versión de GSON y la reescritura del analizador de flujo, la brecha de velocidad se ha cerrado bastante; puede utilizar la impl del analizador de flujo de ellos para obtener velocidades de análisis cercanas a Jackson si eso es crítico.
Dicho esto, si necesita una velocidad máxima por encima y más allá de cualquier cosa y esa es la prioridad n. ° 1, entonces use Jackson.
Aquí está la única solución de análisis JSON incorporada disponible en Java 8: http://stackoverflow.com/a/43667674/603516 – Vadzim