C# - Lendo strings e arquivos no formato JSON
Neste artigo eu vou apresentar os conceitos básicos sobre JSON e mostrar como ler strings e arquivos no formato JSON usando C#. |
JSON significa JavaScript Object Notation e é um padrão aberto
para representar dados como atributos com valores.
Originalmente derivado da sintaxe do JavaScript (daí o seu nome) para
uso em aplicações web como uma alternativa ao XML, é agora usado para
serialização de dados e de transporte em muitas aplicações
standalone e
web. Dessa forma, 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. |
Dessa forma JSON lembra XML :
JSON é texto simples
JSON é "auto-descritivo" (legível)
JSON é hierárquico (valores dentro de valores)
JSON pode ser analisado pelo JavaScript
JSON os dados podem ser transportadas usando AJAX
mas é diferente da XML:
Não utiliza a tag de fechamento
É mais curto e simples
É mais rápido de ler e escrever
Pode ser analisado usando a função eval() do JavaScript
Utiliza matrizes
Não possui palavras reservadas
Possui parser nas principais linguagens e navegadores
Assim, JSON é menor do que XML, é mais rápido e mais fácil de analisar. O motivo principal para usar JSON é que em aplicações web com AJAX, JSON é muito mais rápido e fácil de usar do que XML.
As principais regras de sintaxe JSON são:
Dados JSON estão definidos aos pares no formato: nome : valor
Os dados são separados por vírgulas(,)
As chaves {} contém objetos
Os colchetes [] expressam matrizes/vetores
Basicamente o JSON se baseia na notação NOME : VALOR, onde NOME pode ser o nome que você deseja usar para identificar um objeto e VALOR o valor deste objeto.
Os objetos JSON são definidos entre chaves {} e podem conter múltiplos pares nome:valor:
Exemplo:
var pessoa = { "nome" : "Jose Carlos" , "sobrenome" : "Macoratti" };
var produto = {"ProdutoID":1, "Descricao":"Notebook 14", "ProdutoNumero":"PRD-5381"};
Os arrays em JSON são definidos entre colchetes [] e podem conter múltiplos objetos:
Exemplo :
var cores = [ "Azul" , "Branco", "Vermelho", "Amarelo" ];
Recursos usados:
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando o projeto no VS Community
Abra o VS Community 2015 e clique em New Project;
Selecione a linguagem Visual C# e o template Console Application
Informe o nome C_JSON e clique no botão OK;
Para podermos trabalhar com JSON vamos incluir a referência ao namespace System.Web.Extensions em nosso projeto.
No menu Project clique em Add Reference a seguir selecione o namespace conforme mostra a figura abaixo:
Agora vamos definir os seguintes namespaces no arquivo Program.cs:
using
System;A seguir defina o código abaixo no arquivo Program.cs:
using System; using System.Collections.Generic; using System.Web.Script.Serialization;
namespace CSharp_Json string json = @"{ ""nome"" : ""Jose Carlos"", ""sobrenome"" : ""Macoratti"", ""email"": ""macoratti@yahoo.com"" }"; Console.WriteLine(" == Resultado da leitura do arquivo JSON == "); foreach (KeyValuePair<string, object> entry in resultado) Console.WriteLine(""); |
O assembly System.Web.Extensions fornece a classe JavaScriptSerializer no namespace System.Web.Script.Serialization.
O método Main define uma instância de JavaScriptSerializer e a seguir uma string contendo nosso JSON que desejamos ler.
Analisar o JSON é tão fácil como chamar o método DeserializeObject da instância JavaScriptSerializer, que retorna um objeto cujo tipo é determinado em tempo de execução com base no JSON que você passar.
O método DeserializeObject retorna um Dictionary de pares key-values, onde as chaves são os atributos no JSON e os valores são os objetos representando os valores dos atributos.
Em nosso exemplo percorremos as chaves(keys) e valores (values) no dicionário imprimindo cada uma delas.
Como sabemos o tipo do valor no JSON podemos simplesmente dar um cast para o tipo apropriado (string) usando a palavra chave as; (se o tipo não for string receberemos o valor null).
A classe JavaScriptSerializer também possui um método Serialize; podemos passá-lo como um dicionário de pares atributo-valor como fizemos com o resultado.
Executando o projeto iremos obter:
Para ler um arquivo JSON externo localizado no sistema de arquivos podemos usar o seguinte código definido no método
using System; using System.Collections.Generic; using System.IO; using System.Web.Script.Serialization; static void LerArquivoJson(string arquivo) { JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); using (StreamReader r = new StreamReader(arquivo)) { string json = r.ReadToEnd(); dynamic array = serializer.DeserializeObject(json); Console.WriteLine("");
Console.WriteLine(serializer.Serialize(array));
Console.WriteLine("");
Console.ReadKey();
}
}
|
A chamada deste método poderia ser feita assim : LerArquivoJson(@"c:\dados\arquivoJson.json");
Existe uma maneira mais simples de obter o mesmo resultado usando o framework Json.NET que possui muitos recursos para ler e escrever no formato JSON, mas isso é assunto para outro artigo.
Pegue o projeto completo aqui : CSharp_Json.zip
(Disse
Jesus aos fariseus) Hipócritas, bem profetizou Isaías a vosso respeito,
dizendo:
Este povo se aproxima de mim com a sua boca e me honra com os seus lábios, mas o
seu coração está longe de mim.
Mas, em vão me adoram, ensinando doutrinas que são preceitos dos homens.
Mateus 15:7-9
Referências: