¿Hay alguna forma (con ejemplos de código Java, si es posible) de convertir, sobre la marcha, una entrada XML
al JSON
, sin ningún conocimiento de los contenidos reales y la estructura de la fuente XML (archivo, cadena, etc.)?Conversión dinámica de XML a JSON
Digamos, por ejemplo, que uno tiene un gran conjunto de datos XML con una estructura desconocida y múltiples niveles de anidamiento, almacenados en un archivo de texto grande. Leer todo en la memoria no es posible (por falta de espacio) y quieren convertir esto en JSON
directamente, es decir, sin tener que escribir ningún código para detectar y manejar las etiquetas StAX (por ejemplo, START_ELEMENT
, CHARACTERS
, END_ELEMENT
).
La solución ideal sería la de obtener un Reader
o InputStream
del convertidor, de modo que, por ejemplo, se suministra el archivo XML y la Reader
o InputStream
produce JSON
, para alimentar a un FileOutputStream, o incluso directamente a una JSON
analizador como Jackson
. Si eso no es posible, al menos una forma de leer progresivamente un archivo XML, convertir a JSON y escribir en otro archivo sería un compromiso aceptable.
Herramientas que pueden ser utilizados para la conversión de/a XML/JSON (por ejemplo, StaxON, JSON-lib, Jettison, XStream) no parecen hacer eso pero sólo conversión de una estructura conocida.
EDIT: Conseguir un Reader
o InputStream
de un OutputStream o un escritor (que también abarcaría la "conversión" Hablé de arriba), se puede hacer de varias maneras, aunque para obtener los mejores resultados y la "infinita "tamaños de entrada multihilo está involucrado. Las soluciones se describen en este article in Ostermiller.org y una implementación similar se puede encontrar en el IO-Tools library.
Esto proporciona la "escribir en el archivo" solución (o en la salida estándar). ¡Gracias por la respuesta y el esfuerzo extra! – PNS
¿Cómo ignoras las etiquetas de comentarios con esto? XMLEventWriter arroja excepciones cuando hay etiquetas de comentarios en el xml. – ShaggyInjun
@ShaggyInjun: Esa debería ser su propia pregunta, completar con el código de muestra, no un comentario sobre una respuesta de 1.5 años de antigüedad. –