Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Dudas al procesar un json con php

Estas en el tema de Dudas al procesar un json con php en el foro de PHP en Foros del Web. Hola muy buenas, Tengo un problema al procesar un archivo json que obtengo de una página. Esta me arroja por ejemplo: [{\"event\":\"reject\",\"ts\":1360889409,\"msg\":{\ "ts\":1360889409,\"subject\":\"Recuperar datos de ...
  #1 (permalink)  
Antiguo 02/03/2013, 23:17
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Dudas al procesar un json con php

Hola muy buenas,

Tengo un problema al procesar un archivo json que obtengo de una página. Esta me arroja por ejemplo:
[{\"event\":\"reject\",\"ts\":1360889409,\"msg\":{\ "ts\":1360889409,\"subject\":\"Recuperar datos de acceso\",\"email\":\"estecorreonoexiste22222222222 [email protected]\",\"tags\":[],\"opens\":[],\"clicks\":[],\"state\":\"sent\",\"_id\":\"119cc81e81c54094b7c0 1043a9ae6f16\",\"sender\":\"[email protected]\"}}, {\"event\":\"send\",\"ts\":1360889461,\"msg\":{\"t s\":1360889461,\"subject\":\"Recuperar datos de acceso\",\"email\":\"[email protected]\",\"tag s\":[],\"opens\":[],\"clicks\":[],\"state\":\"sent\",\"_id\":\"a95089c5eb144c6c82ee 9e8947af44c0\",\"sender\":\"[email protected]\"}}


El problema es que primero no entiendo el motivo por el que aparece una barra invetida. ¿Cómo limpio el json? A través de
Código PHP:
$json=stripslashes($peticion); // Eliminar barras invertidas 
??


Y luego yo quiero convertir el json en un array, siempre tendré 3 variables ts, event y msg, que este último a su vez se compone de otro array.

¿Cómo puedo pasar todo esto a un array para luego guardar los registros en una bd con mysql?


Gracias ;)
  #2 (permalink)  
Antiguo 03/03/2013, 17:26
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Dudas al procesar un json con php

Usa json_decode() para pasarlo a objeto o array; revisa el manual para más opciones: http://www.php.net/json_decode
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 03/03/2013, 17:37
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas al procesar un json con php

muchas gracias pero ya lo hice ;) intento sacar los resultados por pantalla pero no va :( qué hago mal??

Código PHP:
$data json_decode($jsontrue);
foreach (
$data as $name) {
    echo 
"prueba $name";

  #4 (permalink)  
Antiguo 03/03/2013, 18:06
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Dudas al procesar un json con php

con var_dump($data); puedes ver lo que obtienes de json_decode(), si el resultado es NULL, entonces hay algo mal en tu variable $json.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 03/03/2013, 19:40
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas al procesar un json con php

Hola Triby,

Eso hice pero me sale null por eso intenté con lo otro... qué puedo hacer??

Graciasss
  #6 (permalink)  
Antiguo 03/03/2013, 21:28
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Dudas al procesar un json con php

Si obtienes NULL es porque estás intentando decodificar un json mal formado.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 04/03/2013, 16:57
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas al procesar un json con php

Gracias Tribi,


Efectivamente el json estaba mal. ¿Hay alguna forma de limpiar los valores?


Ahora tengo dudas a la hora de manejar el array que obtengo del json, ya que dentro del array principal hay otros arrays y ya me pierdo...


Al hacer json_decode se me forma el siguiente array:
array(3) { [0]=> array(3) { ["event"]=> string(6) "reject" ["ts"]=> int(1360889409) ["msg"]=> array(9) { ["ts"]=> int(1360889409) ["subject"]=> string(25) "Recuperar datos de acceso" ["email"]=> string(46) "[email protected] m" ["tags"]=> array(0) { } ["opens"]=> array(2) { [0]=> array(1) { ["ts"]=> int(1360853698) } [1]=> array(1) { ["ts"]=> int(1360894742) } } ["clicks"]=> array(0) { } ["state"]=> string(4) "sent" ["_id"]=> string(32) "119cc81e81c54094b7c01043a9ae6f16" ["sender"]=> string(17) "[email protected]" } } [1]=> array(3) { ["event"]=> string(4) "send" ["ts"]=> int(1360889461) ["msg"]=> array(9) { ["ts"]=> int(1360889461) ["subject"]=> string(25) "Recuperar datos de acceso" ["email"]=> string(21) "[email protected]" ["tags"]=> array(0) { } ["opens"]=> array(0) { } ["clicks"]=> array(0) { } ["state"]=> string(4) "sent" ["_id"]=> string(32) "a95089c5eb144c6c82ee9e8947af44c0" ["sender"]=> string(17) "[email protected]" } } [2]=> array(3) { ["event"]=> string(11) "hard_bounce" ["ts"]=> int(1361476626) ["msg"]=> array(12) { ["ts"]=> int(1361476207) ["subject"]=> string(21) "Registro como usuario" ["email"]=> string(23) "[email protected]" ["tags"]=> array(0) { } ["state"]=> string(7) "bounced" ["_id"]=> string(40) "8188169.60c5c7109d0147f88dfc660e520d9e47" ["_version"]=> int(1) ["diag"]=> string(33) "smtp;550 #5.1.0 Address rejected." ["category"]=> string(17) "mcbouncetype:hard" ["bgtools_code"]=> int(10) ["sender"]=> string(17) "[email protected]" ["bounce_description"]=> string(11) "bad_mailbox" } } }


Yo tengo el siguiente código:

Código PHP:
$data json_decode($jsontrue);


echo
"<br><br>test<br><br>registros<br>";


for (
$i 0$icount($data); $i++) {
    
    echo 
"Evento: "; print $data[$i][event];
    echo
"<br>";
    echo 
"ts: "; print $data[$i][ts];
    echo
"<br>";
    echo 
"id correo: "; print $data[$i][msg][_id];
    echo
"<br>";
    echo 
"correo enviado el: "; print $data[$i][msg][ts];
    echo
"<br>";
    echo 
"destinatario mail: "; print $data[$i][msg][email ];
    echo
"<br>";
    echo 
"remitente: "; print $data[$i][msg][sender ];
    echo
"<br>";
    echo 
"asunto: "; print $data[$i][msg][subject];
    echo
"<br>";
    echo 
"estado envio: "; print $data[$i][msg][state];
    echo
"<br>";    
    echo 
"tema bounces: "; print $data[$i][msg][diag];
    echo
"<br>";        
    echo 
"tema bounces2: "; print $data[$i][msg][bounce_description];
    echo
"<br> opens";        

if (
array_key_exists('opens'$data[$i][msg]) and count($data[$i][msg])>) {

foreach(
$data[$i][msg][opens] as $opens) {
   echo 
"abierto "; print $opens[ts];
}

}
else { echo
"ninguna vez";}

    
//echo "opens: "; print $data[$i][msg][opens][0][ts];
    
echo"<br><br>";
    } 

Pues bien tengo un problema a la hora de trabajar con opens, que tiene un array con las horas a las que el correo ha sido abierto.

¿Hago bien hacer un foreach dentro de un foreach?


El problema que tengo es que a veces no viene el array opens dentro del json, y para que no me salga un warning puse array_key_exists pero claro me interesa que si el array está vacío aparezca ninguno y no funciona la condicional que puse.

¿Hay alguna forma de escribir el segundo foreach? De que sólo lo haga si existe el array opens y NO está vacío?


Gracias ;)
  #8 (permalink)  
Antiguo 04/03/2013, 17:11
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Dudas al procesar un json con php

Claro que se puede y es tan fácil como:

Código PHP:
Ver original
  1. // Verificas si existe el índice, puede ser con isset o array_key_exists, da igual
  2. // Pero también hay que ver que no esté vacío
  3. if(isset($array['indice']) && count($array['indice']) > 0) {
  4.     // Aquí un foreach para mostrar todos los valores
  5. } else {
  6.     // Aquí el texto "Ninguno" o lo que corresponda
  7. }
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 04/03/2013, 17:32
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas al procesar un json con php

me funciona!!!!!!!!! muchas gracias,


sólo confirmar que si en el código que hice dentro de un for, está bien poner varios forech y luego si hay alguna función para limpiar el json.


Graciasss

Etiquetas: dudas, json, mysql, procesar, registro, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:00.