Conversión de datos XML a JSON que se pueden cargar en Couchbase Server se puede lograr con un poco de .NET. Dependiendo de la fuente de los datos, puede utilizar una herramienta como Talend. Pero también es posible que desee escribir una sencilla aplicación C# .NET con Json.NET de Newtonsoft para hacerlo. En este artículo, voy a mostrarte cómo convertir XML a JSON en C# utilizando Json.NET.
¿No usas Couchbase Server? No hay problema, este es un ejemplo bastante genérico. Pero considere las ventajas de tener una base de datos con todas las funciones utilizando JSON en el centro de su solución; indexación, consulta, búsqueda, análisis, soporte móvil son todos incorporados y accesibles con un SDK .NET. Ver más ventajas en nuestro informe técnico o descargar Couchbase y sigue este post.
Datos XML
Para los fines de este tutorial, voy a utilizar un ejemplo XML muy sencillo. Si su XML es más complejo (múltiples atributos, por ejemplo), entonces su enfoque también tendrá que ser más complejo. (Json.NET puede manejar todas las conversiones de XML a Json, pero sigue un conjunto específico de normas de conversión). He aquí un ejemplo de datos:
1 2 3 4 5 6 |
var xml = @" <Invoice> 1/1/2017 00:01 12345 54321 "; |
Fíjate en que tengo este XML como una cadena codificada en C#. En una situación de la vida real, probablemente estarías extrayendo XML de una base de datos, una API REST, archivos XML, etc.
Una vez que tenga el XML sin procesar, puede crear un archivo XmlDocument
objeto (XmlDocument
vive en el Sistema.Xml
espacio de nombres).
1 2 |
XmlDocument doc = nuevo XmlDocument(); doc.CargarXml(xml); |
Conversión con Json.NET
Una vez que tenga un XmlDocument
puede utilizar Json.NET para convertir ese objeto en una representación Json.
1 |
var json = JsonConvert.SerializeXmlNode(doc, Formato.Ninguno, verdadero); |
En este ejemplo, le estoy pidiendo a Json.NET que serialice un nodo XML:
- Utilicé
Formato.Ninguno
. Si quisiera mostrar el Json real, sería mejor utilizarFormato.sangría
- El último
verdadero
especifica que quiero omitir el objeto raíz. En el XML anterior, se puede pensar en<Invoice></Invoice>
como objeto raíz. Sólo quiero los valores del objeto Factura. Si no omitiera el nodo raíz, el Json resultante tendría el siguiente aspecto:{"Invoice":{"Timestamp":"1/1/2017 00:01","CustNumber":"12345","AcctNumber":"54321"}}
Guardar el resultado Json
Finalmente, pongamos el Json en Couchbase. La forma más sencilla de hacerlo sería llamar de nuevo a JsonConvert
para deserializar el Json en un C# objeto
. Ese objeto se utilizaría entonces con Couchbase's cubo.Insertar(...)
método.
1 2 |
objeto transacciónObjeto1 = JsonConvert.DeserializarObjeto(json); cubo.Inserte(Guía.NuevaGuid().ToString(), transacciónObjeto1); |
Con este método, el Json se almacenaría en Couchbase así:
Eso podría estar bien, pero a menudo vas a querer más control del formato. Con Json.NET, podemos serializar a una clase determinada, en lugar de simplemente objeto
. Vamos a crear un Factura
clase así:
1 2 3 4 5 6 |
público clase Factura { público FechaHora Marca de tiempo { consiga; configure; } público cadena CustNumber { consiga; configure; } público int Número de cuenta { consiga; configure; } } |
Observe que ahora hay información de tipo. El Timestamp es un FechaHora
y el AcctNumber es un int
. La conversión seguirá funcionando, pero el resultado será diferente, según Reglas de conversión de Json.NET. (Consulte también el Documentación completa de Json.NET si aún no lo conoce).
1 2 |
Factura transactObject2 = JsonConvert.DeserializarObjeto<Factura>(json); cubo.Inserte(Guía.NuevaGuid().ToString(), transactObject2); |
El resultado de esa inserción tendrá el siguiente aspecto:
- Observe que el campo de fecha y hora es diferente: se almacena de una forma más estandarizada.
- El valor del campo acctNumber no está entre comillas, lo que indica que se está almacenando como un número.
- Por último, observe que los nombres de los campos son diferentes. Esto se debe a la forma en que Json.NET nombra los campos Json por defecto. Puede especificar nombres diferentes utilizando el parámetro
JsonProperty
atributo.
Ya está.
Una cosa más de menor importancia a señalar: He utilizado Guid.NewGuid().ToString()
para crear claves arbitrarias para los documentos. Si dispone de valor(es) en los datos XML que desea utilizar para una clave, podría/debería utilizar esos valor(es) en su lugar.
Esta entrada del blog se inspiró en una conversación por correo electrónico con un usuario de Couchbase. Si tienes alguna sugerencia sobre herramientas, consejos o trucos para facilitar el proceso de conversión de XML a JSON, házmelo saber. O ponte en contacto conmigo si hay algo sobre lo que te gustaría que escribiera en el blog. Puedes envíame un correo electrónico o ponte en contacto conmigo @mgroves en Twitter.
Sigue aprendiendo
-
- Lee: 10 casos comunes de uso de NoSQL para aplicaciones modernas
- Descargar: Couchbase Server o prueba gratuita de Capella DBaaS
- Ver el Migración de Oracle a Couchbase Vídeo en YouTube
- Vea el debate de la mesa redonda sobre desarrollo profesional de The Register Tres formas en que los desarrolladores se adaptan al cambio