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 :

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:


José Carlos Macoratti