Olá pessoal, hoje vou mostrar como converter um arquivo CSV para Json usando apenas duas linhas de código. Por várias vezes o meu chefe me pediu para pegar os dados de uma planilha Excel e colocar no database.
Utilizado
Ferramenta: Visual Studio
Linguagem de programação: C# (sharp)
Pacote: NuGet
Tipo de exemplo: Console application
Framework: .NET Core
Eu criei um aplicação do tipo console no primeiro passo e já comecei com o código. Vamos para prática. Lembro que este artigo foi criado para que você faça junto comigo, usando o passo a passo.
Depois de abrir o projeto, cliquei com o botão direito em cima da pasta de referência e cliquei na opção Manage NuGet Packages. Veja a figura 1.
Depois disso procurei o pacote chamado ConvertCsvToJson criado por mim mesmo e disponibilizado na loja de pacotes da Microsoft chamado NuGet.org. Veja a figura 2.
Figura 2 – Adicionando o NuGet na aplicação
Cliquei no botão Add Package para que já apareça em meu projeto.
Problema
O meu gerente pediu para pegar os dados de uma planilha em Excel para salvar no database específico que a empresa tem. Esse tipo de coisa acontece a todo tempo em grandes e pequenas empresas. Pessoas usam muito a planilha em Excel para fazer listas, gerar gráficos e tudo mais. A planilha que ele me passou tem essas informações aqui. Veja a figura 3.
Eu notei os seguintes campos: Name, Email, Salary e Type. Os campos estão em inglês mas isso não é problema. Depois disso tem os valores de cada campo. O primeiro ponto aqui foi converter o Excel em arquivo CSV que é bem simples, bastou eu abrir o Excel e salvar como CSV. Veja a figura 4.
Eu cliquei para salvar como e depois escolhi a opção CSV como está na figura 4.
Agora com o CSV em mãos, basta usar o componente que eu mesmo criei e disponibilizei grátis na Microsoft. Se você quiser ver mais componentes grátis que eu criei acesse www.mauriciojunior.net/nugets.
Codificando
Em duas linhas de código o sistema vai pegar todos os dados pra mim e depois eu posso trabalhar com eles de uma maneira simples e tranquila dentro da programação. Veja o código 1.
using ConvertCsvToJson;
namespace ConvertExcelToJson { class Program { static void Main(string[] args) { var main = new Main(); var result = ((IMain)main).ConvertCsvFileToJsonObject(“Users.csv”); Console.WriteLine(result); Console.ReadLine(); } } } |
Código 1 – Usando o pacote ConvertCsvToJson
O primeiro ponto aqui foi fazer os importes necessários como o ConvertCsvToJson. Depois disso eu fiz a primeira instância usando a variável main var main = new Main(). Depois disso e na segunda linha eu usei a interface para chamar o método e o resultado eu enviei para outra variável chamada result, var result = ((IMain)main).ConvertCsvFileToJsonObject(“User.csv”) passando a minha planilha convertida para csv.
O resultado dessas duas linhasa foi uma lista com todos os valores do tipo string. Eu só mandei escrever na tela o resultado com os valores em string.
Com essas duas linhas de código tudo ficou bem simples para separar os dados e trabalhar com eles para gravar no banco de dados, mas isso ainda não resolveu todos os meus problemas. Agora eu preciso pegar os dados e separar de acordo com cada campo.
O meu resultado das duas linhas de código foi a string retornada com todos os valores lá. A figura 5 mostra esse dado quando eu analisei passo a passo no sistema, fazendo o debug.
O código 2 mostra como fazer isso depois de pegar o resultado. O que eu preciso agora é gerar uma nova classe com todas as propriedades e o código já vai separar os dados de forma automática em cada campo como uma lista.
Cliquei com o botão direito e gerei uma nova classe chamada UserModel.cs
namespace ConvertExcelToJson
{ public class UserModel { public string Name { get; set; } public string Age { get; set; } public string Email { get; set; } public string Salary { get; set; } public string Type { get; set; } } } |
Código 2 – Criando uma classe com as propriedades
Lembro que para gerar essas propriedades existe a linha de comando prop e depois basta clicar a tecla TAB duas vezes para que possa apenas digitar. Depois de criado a classe de modelo, quero fazer com que o meu resultado esteja em uma lista e cada valor esteja relacionado ao seu campo de forma correta, para isso eu vou fazer o código 3, ou seja, vou adicionar algumas coisas que não fiz anteriormente.
using ConvertCsvToJson;
using Newtonsoft.Json; using System; using System.Collections.Generic; namespace ConvertExcelToJson { class Program { static void Main(string[] args) { var main = new Main(); var result = ((IMain)main).ConvertCsvFileToJsonObject(“Users.csv”); var user = JsonConvert.DeserializeObject<IList<UserModel>>(result); Console.WriteLine(user[0].Name); Console.ReadLine(); } } } |
Código 3 – Colocando os valores nas propriedades
O primeiro de mudança foi acrescentar os importes using Newtonsoft.Json e System.Collections.Generic porque eu vou usar a interface IList e vou usar o DeserializedObject.
A linha 3 do método Main onde eu criei a variável user faz toda a mágica. Eu peguei o resultado da variável result e coloquei dentro do método DeserializedObject<IList> e o resultado foi que todos os valores separados estão agora classificados e podem ser pegos apenas com o nome da propriedade.
No final, bastou colocar user[0].Name para pegar o nome da primeira lista de valores isso porque agora a variável virou uma lista de valores com posições dinâmica, ou seja, de acordo com o que tiver dentro do arquivo csv será criado, não importa a quantidade.
A figura 6 mostra como ficou separado cada valor pego do arquivo csv.
Eu fico por aqui e espero que tenha gostado. Qualquer dúvida, pode entrar em contato comigo pela rede social Instagram em @mauriciojunior_net ou pelo meu site mauriciojunior.net.