Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: JonaLamper en 3 Abril 2017, 13:26 pm



Título: PHP: pasar de Object a JSON
Publicado por: JonaLamper en 3 Abril 2017, 13:26 pm
Muy buenas,

Tengo una clase Mapa que es más o menos de este estilo:

Código
  1. <?php
  2. /**
  3. * Esta clase es un Tranfer Object, que son utilizados para transportar datos
  4. * desde la base de datos hasta las capas superiores.
  5. */
  6. class Mapa{
  7. private $id_mapa;
  8. private $nombre;
  9. private $complejo;
  10. private $usuario;
  11. private $creado;
  12. private $actualizado;
  13. private $descripcion;
  14.  
  15. /** id_mapa */
  16. public function getId_mapa(){
  17. return $this->id_mapa;
  18. }
  19.  
  20. public function setId_mapa($id_mapa){
  21. $this->id_mapa = $id_mapa;
  22. }
  23.  
  24.                // Etc...
  25. }
  26. ?>

Por otro lado, tengo una función que hace un SELECT en la base de datos, coge todos los Mapas almacenados y crea un array de Mapas, es decir, un array que almacena objetos de tipo Mapa.

Código
  1. /**
  2. * Selecciona todos los mapas de la base de datos
  3. * {@inheritDoc}
  4. * @see IMapa::selectMapas()
  5. */
  6. public function selectMapas(){
  7. $data_source = new DataSource();
  8. $data_table = $data_source->ejecutarConsulta("SELECT * FROM mapas");
  9. $mapa = null;
  10. $mapas = array();
  11. foreach ($data_table as $clave => $valor) {
  12. $mapa = new Mapa();
  13. $mapa->setId_mapa($data_table[$clave]["id_mapa"]);
  14. $mapa->setNombre($data_table[$clave]["nombre"]);
  15. $mapa->setComplejo($data_table[$clave]["complejo"]);
  16. $mapa->setUsuario($data_table[$clave]["usuario"]);
  17. $mapa->setCreado($data_table[$clave]["creado"]);
  18. $mapa->setActualizado($data_table[$clave]["actualizado"]);
  19. $mapa->setDescripcion($data_table[$clave]["descripcion"]);
  20. array_push($mapas, $mapa);
  21. }
  22. return $mapas;
  23. }

Una vez hecha la SELECT, quiero pasar el resultado a un JSON. Y lo que tengo es esto:

Código
  1. require 'MapaDAO.php';
  2.  
  3. // Creamos una instancia del DAO para Mapa
  4. $dao = new MapaDAO();
  5.  
  6. /**
  7. * Traer todos lo registros de la tabla Mapas.
  8. */
  9. $resultado = $dao->selectMapas();
  10.  
  11. // Cogemos el primer objeto (la primera fila de la base de datos) y la pasamos a JSON
  12. $json = json_encode($resultado[0]);
  13. echo $json;

Concretamente estoy accediendo a la primera posición del array (al primer objeto de tipo Mapa) y lo estoy intentando pasar a un JSON. Después, en la petición AJAX estoy imprimiento ese JSON, pero me aparece vacío  :huh:

Lo gracioso es que si hago esto:

Código
  1. $json = json_encode($resultado[0]->getId_mapa());

Sí que me muestra el id del mapa en formato JSON. Pero ya os digo, no me funciona cuando le digo que me pase todo el objeto a un JSON. ¿Alguien sabe qué puede estar pasando?

Un saludo  ;D


Posdata: Estoy vfendo en la documentación de PHP lo siguiente: "Si un object se convierte en un object, éste no se modifica. Si un valor de cualquier otro tipo se convierte en un object, se crea una nueva instancia de la clase stdClass incorporada."

¿Es posible que tenga que convertir mi objeto Mapa en un objeto stdClass?


Título: Re: PHP: pasar de Object a JSON
Publicado por: JonaLamper en 3 Abril 2017, 15:41 pm
Al final no he tenido más remedio que crear un objeto stdClass y copiar todos los atributos de mi objeto Mapa.

Por otro lado, quería que el resultado enviado al cliente fuese un JSON. He puesto esto:

Código
  1. header('Content-type: application/json');
  2. echo json_encode($array);
  3.  

Y el resultado en el navegador es este:

(http://s2.subirimagenes.com/imagen/previo/thump_9716990duda.png) (http://www.subirimagenes.com/imagen-duda-9716990.html)

¿Alguien me puede confirmar si ese resultado es un JSON?

Gracias  ;D


Título: Re: PHP: pasar de Object a JSON
Publicado por: engel lex en 3 Abril 2017, 18:14 pm
si te hizo el encode sin problemas, es un json (el lo valida)