VB .NET - Tratando JSON com LINQ
Neste artigo vou mostrar tratar arquivos JSON obtendo informações usando os recursos da LINQ. |
Antes de iniciar a parte prática vamos às apresentações para quem esta iniciando...
JSON é um protocolo leve para intercâmbio de dados e está baseado em um subconjunto da linguagem de programação JavaScript, sendo independente desta e de qualquer linguagem.
É um conjunto de recursos introduzidos no .NET Framework 3.5 que permitem a realização de consultas diretamente em base de dados , documentos XML , estrutura de dados , coleção de objetos ,etc. usando uma sintaxe parecida com a linguagem SQL.
Nas referências deste artigo vou deixar diversos links para artigos que já escrevi sobre JSON e LINQ.
Este artigo será bem prático.
Vou mostrar como podemos ler informações de arquivos JSON usando LINQ.
Recursos Usados:
Criando o projeto Windows Forms no VS Community 2017
Abra o VS 2017 Community e crie um projeto usando a opção : Visual Basic -> Windows Classic Desktop e selecione o template Windows Forms App (.NET Framework);
Informe o nome JSON_LINQ e clique em OK.
No formulário Form1.vb inclua a partir da ToolBox os controles :
3 Button - btnAcessoJSON, btnAcessoJSONLINQ e btnAcessoJSONIndice
2 ListBox - lbNomes e lbFiltro
1 NumericUpDown - nup1
4 Label
4 TextBox - txtNome, txtSobrenome, txtIdade e txtSexo
Disponha os controles conforme o leiaute da figura abaixo:
A seguir vamos incluir a referência ao pacote Newtonsoft.Json que iremos usar para acessar informações JSON.
Após isso podemos implementar o código no projeto.
Definindo a classe ContatoJson
Vamos definir uma classe no projeto chamada ContatoJson com o código abaixo:
Public Class ContatoJson
Public Nome As String
Public Sobrenome As String
Public Idade As String
Public Sexo As String
End Class
|
Usaremos essa classe para acessar e armazenar as informações JSON.
Incluindo um Modulo no projeto e definindo a fonte de dados
Vamos incluir um módulo no projeto e definir na variável pública arquivoContatos a nossa fonte de dados JSON:
Imports Newtonsoft.Json.Linq
Module Module1
Public arquivoContatos As String = "
[
{
'Nome': 'Jose Carlos',
'Sobrenome': 'Macoratti',
'Idade': '41',
'Sexo': 'm'
},
{
'Nome': 'Jessica',
'Sobrenome': 'Lang',
'Idade': '27',
'Sexo': 'f'
},
{
'Nome': 'Jefferson',
'Sobrenome': 'Silveira',
'Idade': '25',
'Sexo': 'm'
},
{
'Nome': 'Bianca',
'Sobrenome': 'Rodrigues',
'Idade': '19',
'Sexo': 'f'
},
{
'Nome': 'Davi',
'Sobrenome': 'Bueno',
'Idade': '56',
'Sexo': 'm'
},
{
'Nome': 'Paula',
'Sobrenome': 'Melado',
'Idade': '45',
'Sexo': 'f'
},
{
'Nome': 'Bruna',
'Sobrenome': 'Sanches',
'Idade': '25',
'Sexo': 'f'
},
{
'Nome': 'Ghandi',
'Sobrenome': '-',
'Idade': '87',
'Sexo': 'm'
}
]"
Public Function LerArquivoJSON(arquivo As String) As String
Dim arquivoJson = JObject.Parse(arquivo)
Return arquivoJson
End Function
End Module
|
Definimos também o método LerArquivoJSON que recebe o nome do arquivo e retorna os dados em uma string : arquivoContatos.
A seguir no evento Click do botão Acessando arquivo JSON inclua o código que vai acessar o arquivo JSON e exibe o nome dos contatos no ListBox:
Private Sub btnAcessoJSON_Click(sender As Object, e As EventArgs) Handles btnAcessoJSON.Click Try GetContatos(arquivoContatos) Catch ex As WebException MessageBox.Show("Error: " & ex.ToString()) End Try End Sub |
Neste código usamos o método GetContatos() que vai acessar o arquivo e deserializar os dados exibindo o nome de cada Contato.
Private Sub GetContatos(contatosJson As String)
Dim listaContatos = JsonConvert.DeserializeObject(Of List(Of ContatoJson))(contatosJson)
For Each Contato In listaContatos
lbNomes.Items.Add(Contato.Nome)
Next
End Sub
|
No evento Click do botão de comando - Acessando JSON usando LINQ e filtrando dados - vamos definir o código a seguir que usa o LINQ para acessar os dados JSON filtrando conforme uma condição :
Private Sub btnAcessoJSONLINQ_Click(sender As Object, e As EventArgs) Handles btnAcessoJSONLINQ.Click
Try
Dim Contatos = JsonConvert.DeserializeObject(Of List(Of ContatoJson))(arquivoContatos)
Dim listaContatos = From contato In Contatos
Where contato.Nome.Contains("J")
Select contato
For Each contato In listaContatos
lbFiltro.Items.Add($"Contato: {contato.Nome} {contato.Sobrenome} Idade: {contato.Idade}")
Next
Catch ex As Exception
MessageBox.Show("Error: " & ex.ToString())
End Try
End Sub
|
Neste código usando uma consulta LINQ para filtrar os dados pelos nomes que contém a letra J.
No evento Click do botão de comando - Acessando JSON e percorrendo os dados por índice - inclua o código que vai acessar os dados JSON usando um índice para avançar e/ou
Private Sub btnAcessoJSONIndice_Click(sender As Object, e As EventArgs) Handles btnAcessoJSONIndice.Click
Try
Dim read = JsonConvert.DeserializeObject(Of List(Of ContatoJson))(arquivoContatos)
nup1.Maximum = read.Count - 1 'total dos itens
txtNome.Text = read.Item(nup1.Value).Nome
txtSobrenome.Text = read.Item(nup1.Value).Sobrenome
txtIdade.Text = read.Item(nup1.Value).Idade
txtSexo.Text = If(read.Item(nup1.Value).Sexo = "m", "Masculino", "Feminino")
Catch ex As WebException
MessageBox.Show("Error: " & ex.ToString())
End Try
End Sub
|
A partir do índice informado no controle NumericUpdDown - nup1 - exibimos os dados do Contato nos TextBox.
Executando o projeto iremos obter:
Pegue o projeto completo aqui : JSON_LINQ.zip
"(Disse Jesus) - Quem ama a sua vida
perdê-la-á, e quem neste mundo odeia a sua vida, guardá-la-á para a vida
eterna."
João 12:25
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
C# - Converter de JSON para Object e vice-versa - Macoratti.net
VB .NET - Consumindo um Web Service JSON ... - Macoratti.net