Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Serializando o json automáticamente

Olá Professor! Estou com uma pulga atrás da orelha. Me incomoda o fato de ter que descrever atributo a atributo do meu objeto para dentro de um array associativo. Estou montando uma entidade com vários atributos diferentes e escrevê-los um a um é cansativo, além de abrir brechas para a falha humana.

Minha dúvida ... exite uma forma de converter o objeto em um array associativo? Eu tentei de duas formas, Segue abaixo:

Tentativa falha 1:

   public function jsonSerialize() {
       return json_decode(json_encode($this), true); 
    }

O retorno aqui é null.

Tentativa falha 2:

   public function jsonSerialize() {
    return (array) $this;
   }

O json aqui até é retornado, mas a chave associativa fica meio estranha. Veja:

{
  "App\\Entity\\Breed.id": 15,
  "App\\Entity\\Breed.name": "First Breed",
  "App\\Entity\\Breed.rare": 0,
  "App\\Entity\\Breed.intelligence": 5,
  "App\\Entity\\Breed.temperament": "playful and emotional"
}

Existe alguma forma de fazer está conversão automaticamente para obter um resultado elegante?

Alias, estou usando Insomnia no lugar de Postman. Valeu!

2 respostas
solução!

Opa, Alisson.

Gostei que você perguntou.

No segundo curso de Symfony nós vamos ver exatamente isso, mas já te adianto que a forma correta de fazer é utilizando essa interface:

http://php.net/jsonserializable

E podemos usar essa função:

http://php.net/get_object_vars

Então sua entidade ficaria parecido com isso:

class Breed implements \JsonSerializable
{
    ...

    public function jsonSerialize()
    {
        return get_object_vars($this);
    }
}

Então, sempre que tivermos um objeto do tipo Breed, podemos chamar a função json_encode direto nele:

$breed = new Breed();
// define os valores
return new JsonResponse($breed);

Obrigado!

Vou ficar de olho na documentação nas próximas vezes hehe.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software