Conhecendo os recursos de serialização JSON do Laravel \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 04 Horas 

 43 Min 

 32 Seg 

   Tempo restante da oferta: 04 43 32 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Conhecendo os recursos de serialização JSON do Laravel  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# Conhecendo os recursos de serialização JSON do Laravel

 Nesse artigo falaremos um pouco sobre o que é serialização de dados e quais os principais recursos que o Laravel/Eloquent possuem para nos ajudar na serialização JSON, um dos formatos mais usados em APIs.

 [ Elton Fonseca ](https://www.treinaweb.com.br/blog/autor/elton-fonseca) 8 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/02/15141252/JSON-LARAVEL-2.png)  

Imagina que compramos uma barraca de acampar e ao chegar em casa montamos. Provavelmente não vamos conseguir carregar a barraca montada, por esse motivo desmontamos, transportamos e depois realizamos a montagem novamente. Quando estamos falando de programação em algumas situações precisamos realizar basicamente o mesmo processo. Em ciência da computação geralmente chamamos de serialização o ato de converter uma estrutura de dados para um formato de transporte ou armazenamento que pode ser reconstruído depois.

Quando trabalhamos com desenvolvimento de [APIs](https://www.treinaweb.com.br/blog/o-que-e-uma-api/ "APIs") é comum precisarmos serializar para o formato no qual eles serão transportados. Na maioria dos casos as APIs utilizam o formato [JSON](https://www.treinaweb.com.br/blog/o-que-e-json/ "JSON"), porém pode ser qualquer outro como [XML](https://www.treinaweb.com.br/blog/o-que-e-xml/ "XML") ou [YAML](https://www.treinaweb.com.br/blog/o-que-e-yaml/ "YAML").

Ao falarmos de serialização o [Laravel](https://www.treinaweb.com.br/blog/o-que-e-laravel/ "Laravel") possui algumas características que nos ajuda a realizar a serialização de forma automática e recursos que nos permite personalizar os dados na serialização.

[  ![Laravel - Desenvolvimento de APIs REST](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/laravel.svg)   Curso Laravel - Desenvolvimento de APIs REST Conhecer o curso ](https://www.treinaweb.com.br/curso/laravel-desenvolvimento-de-apis-rest)

## Serialização automática no Controller

Alguns [frameworks](https://www.treinaweb.com.br/blog/para-que-serve-um-framework/ "frameworks") como [Symfony](https://www.treinaweb.com.br/blog/o-que-e-symfony/ "Symfony") esperam que o retorno de um método do controller seja sempre uma instância da classe response, contudo no caso do Laravel isso é um pouco diferente. Quando retornamos qualquer estrutura iterável em um controller automaticamente ele tenta serializar para JSON e enviar na resposta. Inclusive ele indica no cabeçalho da resposta que estamos retornando `application/json`.

Faça um teste retornando um array simples ou mesmo o resultado de uma busca com [Eloquent](http:/https://www.treinaweb.com.br/blog/tag/eloquent/ "Eloquent"):

```php
public function action()
{
    return ["Escola" => "Treinaweb Cursos"];
}

```

Ao acessar terá:

![conversão json laravel](https://dkrn4sk0rn31v.cloudfront.net/2019/02/13164054/conversao-automatica-json-laravel.png)

Mesma coisa também acontece se retornarmos o resultado de uma consulta no banco de dados com Eloquent:

```php
public function action()
{
    return AppProduct::all();
}

```

## Serialização manual

O Laravel também nos permite serializar os dados manualmente. Basta chamarmos o método `toJson` em uma collection. Como os models do Eloquent sempre retornam uma collection quando buscamos por mais de um registro, podemos trabalhar do seguinte modo:

```php
$products = AppProduct::all();

$json = $products->toJson();

```

Um detalhe importante! Quando fazemos a serialização o resultado é uma string simples com uma marcação no formato JSON. No caso acima, se retornarmos a variável `$json` em um controller o `content-type` será `text/html`. O correto então é montar a resposta informando manualmente que estamos retornando um `application/json`.

[  ![Laravel - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/laravel.svg)   Curso Laravel - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/laravel-fundamentos)

## Escolhendo os dados que não serão serializados

Muitas vezes não podemos retornar todos os dados do nosso model para a resposta. Imagine que o produto tem um campo preço de custo, não é nada legal enviar isso para um revendedor, por exemplo.

Nesses casos podemos declarar um atributo no model informando quais propriedades não devem ser incluídas quando realizarmos a serialização:

```php
