PHP: pasar de Object a JSON

Iniciado por JonaLamper, 3 Abril 2017, 13:26 PM

0 Miembros y 1 Visitante están viendo este tema.

JonaLamper

Muy buenas,

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

Código (php) [Seleccionar]
<?php
/**
 * Esta clase es un Tranfer Object, que son utilizados para transportar datos
 * desde la base de datos hasta las capas superiores.
 */
class Mapa{
private $id_mapa;
private $nombre;
private $complejo;
private $usuario;
private $creado;
private $actualizado;
private $descripcion;

/** id_mapa */
public function getId_mapa(){
return $this->id_mapa;
}

public function setId_mapa($id_mapa){
$this->id_mapa $id_mapa;
}

                
// Etc...
}
?>


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 (php) [Seleccionar]
/**
* Selecciona todos los mapas de la base de datos
* {@inheritDoc}
* @see IMapa::selectMapas()
*/
public function selectMapas(){
$data_source = new DataSource();
$data_table = $data_source->ejecutarConsulta("SELECT * FROM mapas");
$mapa = null;
$mapas = array();
foreach ($data_table as $clave => $valor) {
$mapa = new Mapa();
$mapa->setId_mapa($data_table[$clave]["id_mapa"]);
$mapa->setNombre($data_table[$clave]["nombre"]);
$mapa->setComplejo($data_table[$clave]["complejo"]);
$mapa->setUsuario($data_table[$clave]["usuario"]);
$mapa->setCreado($data_table[$clave]["creado"]);
$mapa->setActualizado($data_table[$clave]["actualizado"]);
$mapa->setDescripcion($data_table[$clave]["descripcion"]);
array_push($mapas, $mapa);
}
return $mapas;
}


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

Código (php) [Seleccionar]
require 'MapaDAO.php';

// Creamos una instancia del DAO para Mapa
$dao = new MapaDAO();

/**
* Traer todos lo registros de la tabla Mapas.
*/
$resultado = $dao->selectMapas();

// Cogemos el primer objeto (la primera fila de la base de datos) y la pasamos a JSON
$json = json_encode($resultado[0]);
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 (php) [Seleccionar]
$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?
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.

JonaLamper

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 (php) [Seleccionar]

header('Content-type: application/json');
echo json_encode($array);


Y el resultado en el navegador es este:



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

Gracias  ;D
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.

engel lex

si te hizo el encode sin problemas, es un json (el lo valida)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.