Convertir XML a JSON en JavaScript
- El lenguaje de marcado extensible (XML)
- La notación de objetos de JavaScript (JSON)
-
Utilice el método
matchAll()
para convertir XML a JSON en JavaScript
En este artículo, aprenderemos cómo convertir cadenas XML a datos de formato JSON con la ayuda de expresiones regulares y el método de cadena predeterminado matchAll()
en JavaScript.
El lenguaje de marcado extensible (XML)
El lenguaje de marcado extensible (XML) es un lenguaje de marcado cercano a HTML. No tiene etiquetas predefinidas como HTML, pero podemos definir nuestras etiquetas para nuestros requisitos.
Podemos almacenar, buscar y compartir los datos usando XML.
Ejemplo:
<root>
<tag>tag content</tag>
<tag2>another content</tag2>
</root>
Necesitamos abrir y cerrar la etiqueta con /
como HTML.
La notación de objetos de JavaScript (JSON)
La notación de objetos de JavaScript (JSON) es un formato de texto para almacenar y transportar datos. Es autodescriptivo y fácil de entender.
En JSON, almacenamos datos en pares clave-valor (cada clave tiene un valor).
Ejemplo:
'{"name":"Bravo", "age":40, "car":null}'
Utilice el método matchAll()
para convertir XML a JSON en JavaScript
Hay varias formas de convertir o traducir datos XML a JSON con precisión. Aprenderemos a convertir XML a JSON usando regex (expresión regular) y el método de cadena de JavaScript predeterminado matchAll()
.
El método de JavaScript matchAll()
devuelve un iterador de todos los resultados haciendo coincidir una cadena con la ayuda de la expresión regular proporcionada.
Entrada proporcionada por el usuario (XML):
<root><tag>tag content</tag><tag2>another content</tag2></root>
Salida JSON esperada después de la conversión:
[object Object] {
root: [object Object] {
tag: "tag content",
tag2: "another content"
}
}
En el siguiente ejemplo, usaremos una cadena XML e implementaremos el método matchALL()
con expresiones regulares para convertirlo al formato de datos JSON.
Regex requerido:
regex = /(?:<(\w*)(?:\s[^>]*)*>)((?:(?!<\1).)*)(?:<\/\1>)|<(\w*)(?:\s*)*\/>/gm;
Ejemplo:
<script>
const xmlString = '<root><tag>tag content</tag><tag2>another content</tag2></root>'; //provided xml
function convertXmlToJson(xmlString) {
const jsonData = {};
for (const result of xmlString.matchAll(/(?:<(\w*)(?:\s[^>]*)*>)((?:(?!<\1).)*)(?:<\/\1>)|<(\w*)(?:\s*)*\/>/gm)) {
const key = result[1] || result[3];
const value = result[2] && convertXmlToJson(result[2]); //recusrion
jsonData[key] = ((value && Object.keys(value).length) ? value : result[2]) || null;
}
return jsonData;
}
console.log("Data after converting to JSON:")
console.log(convertXmlToJson(xmlString)); //print the result in logs
</script>
Producción :
"Data after converting to JSON:"
[object Object] {
root: [object Object] {
tag: "tag content",
tag2: "another content"
}
}
Explicación:
-
En el ejemplo, inicializamos la cadena XML en una variable para generar datos JSON.
-
Hemos declarado una función
convertXmlToJson()
para obtener la cadena XML como argumento. -
En esa función, usamos el bucle
for
para iterar la ejecución en la cadena XML conmatchAll(regex)
. -
Dentro del cuerpo del bucle, estamos creando claves y valores y almacenando el resultado en la variable ya declarada
const jsonData = {}
. -
Puedes ver una función llamada
convertXmlToJson()
dentro del propio cuerpo. Se conoce como recursividad (función recursiva).Las funciones recursivas se llaman entre llaves para iterar la ejecución.
-
Luego, simplemente devolvemos el
convertXmlToJson()
con la variablejsonData
. -
Usamos el método
console.log()
para llamar a la función y mostrar el resultado devuelto.