Instituto Federal de Mato Grosso do SulDezembro/2021

IFMS marca

09. Arquivos (JSON)

Algoritmos 2

Prof. Rodrigo Duran

Nesta aula vamos:


  • Vamos aprender o que são arquivos e como ler arquivos em JavaScript.

    Diferente das variáveis armazenadas na memória principal (RAM), dados armazenados na memória secundária são persistentes e podem ser acessados mesmo após o término do programa. Vamos aprender a manipular o principal formato de dados em JavaScript, o JSON!

Arquivos

Lendo e escrevendo dados de forma persistente

Usando arquivos de dados


Até agora os dados manipulados por programas eram armazenados em variáveis. Esses dados são não-persistentes, ou seja, após o fim do programa esses dados são removidos da memória do computador.

Entretanto, existem várias razões para manipular dados persistentes, os quais permanecem gravados mesmo após o término do programa (geralmente na memória secundária: um disco rígido):

  • Ao usar um programa que salve documentos de texto, uma imagem, contatos no seu smartphone;
  • Ao ler dados de um experimento científico armazenado em um arquivo e calcular os resultados de sua análise;
  • Em um aplicativo no smartphone, ao ser capaz de ler e armezenar as preferências do usuário;
  • Em um jogo de computador que salva o progresso do jogador.

Quando um arquivo serve de entrada para um programa, nós dizemos que lemos um arquivo. Quando um programa armazena informações em um arquivo estamos escrevendo em um arquivo.

Formatos de Arquivos


Para que cada programa acesse os dados de forma consistente, arquivos devem especificar uma forma (padrão) de armazenar e ler esses dados em sua estrutura. Chamamos a essa estrutra de formato de arquivo.

Existem milhões de formatos de arquivos diferentes. De forma geral podemos identificar formatos distintos através de extensões de arquivos distindos. Algumas extensões são bem familiares, por exemplo:

  1. Arquivos de texto puro possuem terminação .txt
  2. Arquivos de Imagem em Bitmap puro possuem terminação .bmp
  3. Arquivos de Documentos do Microsft Word tem terminação .doc

Obviamente, essas extensões apenas nos dão uma dica do formato de artigo. O que realmente nos diz a respeito de um formato de arquivo é a sua estrutura interna.

Programas que estão preparados para ler um determinado formato de arquivo entendem a estrutura descrita por esse formato e conseguem fazer sentido dos dados ali armazenados.

Existem várias formas de se armazenar os dados. De forma grosseira podemos distinguir duas formas mais usuais: texto puro ou binário

  1. Formatos de texto puro podem ser lidos diretamente por humanos pois seus caracteres são armazenados diretamente no arquivo. Exemplos de formato de texto puro: .txt ou CSV (Comma-Separated Values)
    John,Doe,120 jefferson st.,Riverside, NJ, 08075 Jack,McGinnis,220 hobo Av.,Phila, PA,09119 "John ""Da Man""",Repici,120 Jefferson St.,Riverside, NJ,08075 Stephen,Tyler,"7452 Terrace road",SomeTown,SD, 91234

  2. Formatos binários não reproduzem caracteres e só podem ser lidos por programas que entendem a sua estrutura. Abaixo temos um fragmento de um arquivo .doc com o mesmo conteúdo do CSV acima.
    504b 0304 1400 0600 0800 0000 2100 dfa4 d26c 5a01 0000 2005 0000 1300 0802 5b43 6f6e 7465 6e74 5f54 7970 6573 5d2e 786d 6c20 a204 0228 a000 0200 0000 0000 0000 ...

JSON

JavaScript Object Notation

JavaScript Object Notation (JSON)


O JSON é um formato de arquivo aberto e também um formato de troca de dados. É formatado em texto puro e portanto pode ser lido por humanos.

Por ser baseado na notação de objetos de JavaScript, sua notação é extremamente similar à declaração de objetos usando o par atributo:valor

{
  "nome": "Lucy van Pelt",
  "idade": 15,
  "endereco": "Rua Tupinambás 144",
  "cidade": "Bady Bassit",
  "estado": "SP",
  "genero": "Female",
  "doadora": true
}

Os arquivos JSON também permitem serializar outros objetos e arrays dentro do arquivo. A notação é a mesma utilizada no próprio JavaScript

Definindo arrays em um arquivo JSON:

{
  "nome": "Lucy van Pelt",
  "idade": 15,
  "endereco": "Rua Tupinambás 144",
  "cidade": "Bady Bassit",
  "estado": "SP",
  "genero": "Female",
  "doadora": true,
  "preferencias": ["Ação", "Terror", "Comédia"]
}

Definindo Objetos dentro de objetos em um arquivo JSON:

{
  "classe":{
    "identificacao": "Algoritmos 2",
    "periodo": 2,
    "matriculados": [
      {"nome": "Chico Bento", "idade": 14},
      {"nome": "Rosinha", "idade": 14},
      {"nome": "´Zé Lelé", "idade": 14}
    ]
  }
}

Lendo arquivos JSON


JavaScript foi criado para a Internet. Logo, não é surpresa que a leitura de arquivos em JavaScript seja direcionado a um modelo em rede.

O conceito de leitura de um arquivo JSON, seja ele na máquina local ou em um servidor na Internet, é o mesmo.

Inicialmente temos que fazer uma solicitação do arquivo e assincronamente esperar que o mesmo seja carregado. Quando este carregamento for finalizado uma função é acionada e nós podemos finalmente manipular esse arquivo.

A boa noticia é que após carregado e lido, o arquivo JSON se torna facilmente em um objeto, o qual podemos manipular normalmente.

carregando JSON

Escrevendo arquivos JSON


Imagine que qualquer página web pudesse escrever arquivos no seu computador...

Quais as implicações de segurança?

Claro, você pode sempre pedir para o usuário salvar um arquivo na máquina...

No semestre que vem, veremos como fazer a comunicação entre cliente e servidor para enviar esses arquivos!