Olá pessoal, meu nome é Mauricio Junior e hoje eu 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.
Figura 1 - Abrindo o pacote NuGet
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.
Figura 3 - Planilha de Excel
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.
Figura 4 - Convertendo Excel para CSV
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.
Figura 5 - Dados pegos do arquivo CSV
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
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.
Figura 6 - Resultado final.
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.