1
resposta

Exercício de ENCODE e DECODE .json

Boa tarde Turma!

Fui um pouco além do ensinado e solicitado pelo Prof. Vinícius e criei uma função para gerar o nome do arquivo .json que irá salvar os dados do filme contidos no array associativo php.

--

A função é composta pelo método - explode() - que divide a string em partes separadas pelo "espaço" e as armazena em uma - array - . Em sequência, inicia um - looping for - , iterando e concatenando todas as partes que foram separadas e armazenadas nos indices do array, formando uma nova string contendo o nome do filme sem separação por "espaço".

Essa string gerada, contendo o nome do filme completo sem separação por espaço é atribuída a uma variável que consequentemente retorna um valor que será atribuída a uma variável presente no arquivo "/criar-filme.php" que também está na pasta do projeto screen-match.

--

A função que está presente no arquivo funcoes.php e na pasta do projeto screen-match é chamada pela função REQUIRE, importando as funções e permitindo a interação entre os arquivos e códigos.

A função é chamada juntamente com o atributo do valor "nomeFilme" , que está presente e acessível através do array associativo juntamente com sua chave associativa:

$nomeFilme = criarNomeArquivosJsonFilmes($dadosNovoFilme['nomeFilme']);

No arquivo "criar-filme.php", que está logo a baixo, é possível conferir como ocorre essa criação do nome do arquivo através da função "criarNomeArquivosJsonFilmes($nomeFilme)".

function criarNomeArquivosJsonFilmes($nomeFilme){
    $partesNome = explode(" ", $nomeFilme);
    $juntaPartesNome = "";
    for($p = 0; $p < count($partesNome); $p++) {
        $juntaPartesNome .=  $partesNome[$p]; //concatena as variaveis tipo string
    }
    return $juntaPartesNome;
}

Logo na sequencia, também no arquivo, é possível visualizar como apliquei a variável "$nomeFilme" no algoritmo de criação do arquivo .json que é exportado para pasta externa do projeto screen-match.

<?php
require __DIR__ . "/funcoes-junior.php";

// 1) Transforme o array associativo $filme em um JSON e escreva o resultado em um arquivo;

$dadosNovoFilme = [
    "nomeFilme" => "A Forja - O Poder da Transformação",
    "anoLancamento" => 2024,
    "notasAvaliacoes" => [10,9,10,10,8,9,8,10,9],
    "planoPrime" => true,
    "genero" => "drama",
];

$nomeFilme = criarNomeArquivosJsonFilmes($dadosNovoFilme['nomeFilme']);

$nomeDoArquivo = __DIR__ . '/'. $nomeFilme. '.json';
$filmesExportar = json_encode($dadosNovoFilme);

file_put_contents($nomeDoArquivo, $filmesExportar);

Na segunda parte do exercício, executamos o algoritmo para a importação e decodificação dos dados do filme contidos dentro do arquivo .json que são novamente transformados em um array associativo em PHP ficando disponível para ser utilizado novamente dentro do código em uma "variável / array" que denominei de $filmeImportadoEDecodificado.

<?php

//Em outro arquivo PHP, leia o conteúdo em JSON e transforme-o em um array associativo no PHP.

$importaFilme = file_get_contents(__DIR__ . '/AForja-OPoderdaTransformação.json');

$decodeFilmeImportado = json_decode($importaFilme, true);

$filmeImportadoEDecodificado = $decodeFilmeImportado;

var_dump($filmeImportadoEDecodificado);

Espero que tenham entendido meu código e sua explicação e também estou disposto a críticas e melhorias.

Att, Julio C. S. Junior

1 resposta

Beleza, Júlio?! Algumas sugestões para aprimorar o seu código:

  • Evite problemas com nomes de arquivos inválidos (por exemplo, espaços em branco ou caracteres especiais). Uma sugestão seria usar preg_replace para substituir caracteres não permitidos por um hífen ou outro caractere seguro.

  • Antes de gravar os dados em JSON, seria interessante validar se o array contém todos os campos necessários (por exemplo, garantir que nomeFilme, anoLancamento, etc., estão presentes).

  • Ao escrever o JSON, se você quiser um arquivo mais legível, pode passar o parâmetro JSON_PRETTY_PRINT para o json_encode. Isso vai formatar o JSON de forma mais legível ao invés de ser uma string compactada.

  • Ao usar file_put_contents ou file_get_contents, seria bom verificar se a operação foi bem-sucedida. Por exemplo, após file_put_contents, você pode verificar se o arquivo foi realmente criado ou se ocorreu algum erro.

  • Após o json_decode, é interessante verificar se ocorreu algum erro de decodificação. Você pode usar json_last_error() para capturar possíveis problemas ao interpretar o arquivo JSON.

  • Se a função criarNomeArquivosJsonFilmes for usada frequentemente, você poderia refatorá-la para ser mais genérica, aceitando outros tipos de entrada, não apenas o nome do filme. Isso aumenta a flexibilidade e reutilização do código.

  • Ao invés de remover os espaços diretamente, você pode também considerar transformar o nome do filme para um formato mais adequado, como usar str_replace(" ", "_", $nomeFilme) ou até mesmo transformar tudo em minúsculas para manter a consistência (ex: strtolower).

Por exemplo:

function criarNomeArquivosJsonFilmes($nomeFilme){ // Remove espaços e caracteres especiais $nomeFilme = preg_replace('/[^a-zA-Z0-9]/', '_', $nomeFilme); return strtolower($nomeFilme); // Deixa o nome do arquivo em minúsculas }