Conversão de dados XML em JSON que podem ser carregados no Couchbase Server pode ser realizado com um pouco de .NET. Dependendo da fonte dos dados, você poderá usar uma ferramenta como Talend. Mas você também pode querer escrever um aplicativo C# .NET simples com Json.NET da Newtonsoft para fazer isso. Neste artigo, mostrarei a você como converter XML em JSON no C# usando o Json.NET.
Não está usando o Couchbase Server? Não tem problema, este é um exemplo bastante genérico. Mas considere as vantagens de ter um banco de dados com todos os recursos usando JSON no centro da sua solução; indexação, consulta, pesquisa, análise e suporte móvel são todos integrados e acessíveis com um SDK DO .NET. Veja mais vantagens em nosso whitepaper técnico ou download do Couchbase e acompanhe esta postagem.
Dados XML
Para os fins deste tutorial, usarei um exemplo de XML muito simples. Se seu XML for mais complexo (vários atributos, por exemplo), sua abordagem também terá de ser mais complexa. (O Json.NET pode lidar com todas as conversões de XML para Json, mas ele segue um conjunto específico de regras de conversão). Aqui está um exemplo de dados:
1 2 3 4 5 6 |
var xml = @" <Invoice> 1/1/2017 00:01 12345 54321 "; |
Observe que eu tenho esse XML como uma string codificada no C#. Em uma situação real, você provavelmente estaria extraindo XML de um banco de dados, de uma API REST, de arquivos XML etc.
Quando você tiver o XML bruto, poderá criar um XmlDocument
objeto (XmlDocument
vive no System.Xml
namespace).
1 2 |
XmlDocument doc = novo XmlDocument(); doc.LoadXml(xml); |
Conversão com Json.NET
Quando você tiver um XmlDocument
você pode usar o Json.NET para converter esse objeto em uma representação Json.
1 |
var json = JsonConvert.SerializarXmlNode(doc, Formatação.Nenhum, verdadeiro); |
Neste exemplo, estou pedindo ao Json.NET para serializar um nó XML:
- Eu usei
Formatação.Nenhum
. Se eu quisesse exibir o Json real, talvez fosse melhor usarFormatação.Indentado
- O último
verdadeiro
especifica que eu quero omitir o objeto raiz. No XML acima, você pode pensar em<Invoice></Invoice>
como o objeto raiz. Eu só quero os valores do objeto Invoice. Se eu não omitisse o nó raiz, o Json resultante teria a seguinte aparência:{"Invoice":{"Timestamp":"1/1/2017 00:01","CustNumber":"12345","AcctNumber":"54321"}}
Salvando o resultado Json
Por fim, vamos colocar o Json no Couchbase. A maneira mais fácil de fazer isso seria chamar novamente o JsonConvert
para desserializar o Json em um C# objeto
. Esse objeto seria então usado com a função bucket.Insert(...)
método.
1 2 |
objeto transactObject1 = JsonConvert.DeserializeObject(json); balde.Inserir(Guia.NovoGuia().ToString(), transactObject1); |
Com esse método, o Json seria armazenado no Couchbase da seguinte forma:
Isso pode ser bom, mas muitas vezes você vai querer ter mais controle sobre o formato. Com o Json.NET, podemos serializar para uma determinada classe, em vez de apenas objeto
. Vamos criar um Fatura
classe assim:
1 2 3 4 5 6 |
público classe Fatura { público DateTime Carimbo de data/hora { obter; definir; } público string CustNumber { obter; definir; } público int AcctNumber { obter; definir; } } |
Observe que agora há algumas informações de tipo. O Timestamp é um DateTime
e o AcctNumber é um int
. A conversão ainda funcionará, mas o resultado será diferente, de acordo com Regras de conversão do Json.NET. (Confira também o Documentação completa do Json.NET se você ainda não estiver familiarizado com ele).
1 2 |
Fatura transactObject2 = JsonConvert.DeserializeObject<Fatura>(json); balde.Inserir(Guia.NovoGuia().ToString(), transactObject2); |
O resultado dessa inserção terá a seguinte aparência:
- Observe que o campo de registro de data e hora é diferente: ele é armazenado de uma forma mais padronizada.
- O valor do campo acctNumber não está entre aspas, o que indica que está sendo armazenado como um número.
- Por fim, observe que os nomes dos campos são diferentes. Isso se deve à maneira como o Json.NET nomeia os campos Json por padrão. Você pode especificar nomes diferentes usando o parâmetro
JsonProperty
atributo.
É isso aí
Mais um pequeno detalhe a ser destacado: Eu usei Guid.NewGuid().ToString()
para criar chaves arbitrárias para os documentos. Se você tiver valor(es) nos dados XML que deseja usar como chave, poderá/deverá usar esse(s) valor(es).
Esta publicação do blog foi inspirada em uma conversa por e-mail com um usuário do Couchbase. Se você tiver alguma sugestão de ferramentas, dicas ou truques para facilitar o processo de conversão de XML para JSON, entre em contato comigo. Ou entre em contato comigo se houver algo sobre o qual gostaria de ver meu blog! Você pode enviar-me um e-mail ou entre em contato comigo @mgroves no Twitter.
Continue aprendendo
-
- Leia: 10 casos de uso comuns de NoSQL para aplicativos modernos
- Download: Couchbase Server ou obtenha uma avaliação gratuita do Capella DBaaS
- Assista ao Migração de Oracle para Couchbase Vídeo do YouTube
- Assista à discussão do painel de Desenvolvimento de Carreira do The Register Três maneiras pelas quais os desenvolvedores estão se adaptando às mudanças