Foros del Web » Programando para Internet » PHP »

Recorrer JSON con PHP

Estas en el tema de Recorrer JSON con PHP en el foro de PHP en Foros del Web. Hola buen día amigos y colegas: Necesito por favor de su apoyo para resolver un problema que tengo. La siguiente estructura JSON necesito recorrerla y ...
  #1 (permalink)  
Antiguo 13/08/2014, 09:42
 
Fecha de Ingreso: julio-2012
Mensajes: 18
Antigüedad: 11 años, 9 meses
Puntos: 0
Exclamación Recorrer JSON con PHP

Hola buen día amigos y colegas:

Necesito por favor de su apoyo para resolver un problema que tengo.
La siguiente estructura JSON necesito recorrerla y almacenarla en una base de datos mysql.
La verdad he intentado recorrerla pero no he tenido éxito.


Código:
[{
  "id": 254,
  "name": "Prueba JSON",
  "puntuaje": 10,
  "link": "ejemplojason.com",
  "type": [
    "pagina_web",
    "ocio",
    "programacion",
    "php"
  ],
  "versions": [
    {
      "id": 255,
      "type": [
        "lang_ingles",
        "app",
        "v1"
      ],
      "label": "version app ingles"
    },
    {
      "id": 256,
      "type": [
        "lang_espanol",
        "app",
        "v2"
      ],
      "label": "version app espanol"
    },
    {
      "id": 257,
      "type": [
        "lang_jap",
        "app",
        "v3"
      ],
      "label": "version app japones"
    }
  ],
  "info": {
    "Sitio web",
    "autor": "man, dude, jhon",
    "country": "Estados Unidos",
    "genre": [
      "ocio"
    ],
    "rating": "5",
    "year": "2014"
  },
  "attributes": [
    "lang_ingles",
    "v1",
    "v3",
    "lang_espanol"
  ]
},
{
  "id": 300,
  "name": "Prueba JSON 2",
  "puntuaje": 1,
  "link": "ejemplojason2.com",
  "type": [
    "app",
    "ocio",
    "programacion",
    "php"
  ],
  "versions": [
    {
      "id": 301,
      "type": [
        "lang_ingles",
        "app",
        "v2"
      ],
      "label": "version app ingles"
    },
    {
      "id": 302,
      "type": [
        "lang_espanol",
        "app",
        "v3"
      ],
      "label": "version app espanol"
    },
    {
      "id": 303,
      "type": [
        "lang_jap",
        "app",
        "v4"
      ],
      "label": "version app japones"
    }
  ],
  "info": {
    "Sitio web",
    "autor": "man, dude, jhon",
    "country": "Estados Unidos",
    "genre": [
      "ocio"
    ],
    "rating": "15",
    "year": "2014"
  },
  "attributes": [
    "lang_ingles",
    "v1",
    "v3",
    "lang_espanol"
  ]
}
]
he intentado recorrerlo de esta forma:

Código PHP:
$json file_get_contents('ejemplo.json'");
                    $obj = json_decode($json, true);
                    
                    foreach ($obj as $key => $value) 
                    { 
                        echo "
$key$value";

                            foreach ($value as $k => $v) 
                            { 
                                echo "
$k $v <br />"; 
                            }    
                    } 
Pero tengo errores como:

Warning: Invalid argument supplied for foreach()

Notice: Array to string conversion in

Que se que es por que cuando recorro el JSON se topa con valores que terminan siendo arreglos.



De antemano agradezco mucho su atención y tiempo. Gracias.. Saludos..
  #2 (permalink)  
Antiguo 13/08/2014, 09:54
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Recorrer JSON con PHP

Código PHP:
Ver original
  1. $obj = json_decode($json, true);
  2. var_dump($obj);

Con el var_dump puede ver la estructura del arreglo y con eso ver que es lo que tienes que hacer para recuperar los datos que requieres de el y almacenarlos en tu base de datos.
Si requiere otra cosa coloca el código que estas usando realmente y que quieres hacer.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 13/08/2014, 10:52
 
Fecha de Ingreso: julio-2012
Mensajes: 18
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Recorrer JSON con PHP

hola hhs gracias por responder,

Te comento ya he utilizado el var_dump y ya se como es la estructura del arreglo, los datos que quiero obtener son:

id
name
puntuaje
link
type
versions
info
attributes

para almacenarlos en una base de datos mysql, la cuestión es que tanto type como
versions tienen a su vez otros atributos anidados.

Necesito hacer un recorrido mas o menos así:

Código PHP:
Ver original
  1. $json = file_get_contents('ejemplo.json');
  2. $obj = json_decode($json, true);
  3.                    
  4.                     //var_dump($obj);
  5.                    
  6.                     foreach($obj as $item[])
  7.                    
  8.                     {  
  9.                             echo "
  10.                                 ID:'".$item['id']."'<br/>
  11.                                 NAME:'".$item['name']."'<br/>
  12.                                 SCORE:'".$item['score']."'<br/>
  13.                                 LINK:'".$item['cover']."'<br/>
  14.                                TYPE:'".$item['type']."'<br/>
  15.                                VERSION:'".$item['versions']."'<br/>
  16.                                INFO:'".$item['info']."'<br/>
  17.                                IDIOMA:'".$item['label']."'<br/><br/>
  18.                             ";
  19.                     }
  #4 (permalink)  
Antiguo 13/08/2014, 17:11
 
Fecha de Ingreso: julio-2012
Mensajes: 18
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Recorrer JSON con PHP

Ya logre recorrer algunos de los elementos del JSON, pero tengo inconvenientes al momento de recorrer "versions" Este es mi codigo:

Código PHP:
$json file_get_contents('ejemplo.json');
                    
$obj json_decode($json);
                    
                                                            
                    echo 
" ID:    '".$id $obj->id."'<br/>
                           NAME:  '"
.$name $obj->name."'<br/>
                           SCORE: '"
.$score $obj->score."'<br/>
                           LINK:'"
.$cover $obj->cover."'<br/>";
                          
                          
                    foreach (
$type $obj->type as $key => $value
                    { 
                        echo 
"TYPE:$key| $value<br/>";
                                                
                    }
                    
                    

                     
//Este es con el que tengo inconvenientes, si lo quito recorro y recojo los datos del JSON   
                    
foreach ($versions $obj->versions     as $b => $v
                    { 
                        echo 
"VERSIONS:type:$b| $v<br/>";
                                                    
                    }
                    

                    
                                        
                    foreach (
$info $obj->info as $key3 => $value3
                    { 
                                            
                        if (
is_array($value3))
                        {
                        
                            foreach (
$info $obj->info->genre as $l => $m
                            { 
                                echo 
"INFO:genre:$l| $m<br/>";
                                                    
                            }
                        
                        
                        } else 
                        
                            {
                        
                                echo 
"INFO:$key3| $value3<br/>";
                        
                            }
                                                
                    }
                    
                    foreach (
$attr $obj->attributes as $key4 => $value4
                    { 
                        echo 
"ATTRIBUTES:$key4| $value4<br/>";
                                                
                    }
                    
                                    
                                                    
                    echo 
" IDIOMA:'".$lang $obj->label."'<br/><br/>"
El error que me tira es el siguiente:

Catchable fatal error: Object of class stdClass could not be converted to string

Bueno gracias!!
  #5 (permalink)  
Antiguo 13/08/2014, 17:17
Avatar de alex171294  
Fecha de Ingreso: agosto-2014
Mensajes: 10
Antigüedad: 9 años, 9 meses
Puntos: 2
Respuesta: Recorrer JSON con PHP

pasalo por get_object_vars (luego de json decode) porque json te devuelve objetos con propiedades en vez de arreglos.

saludos!
  #6 (permalink)  
Antiguo 13/08/2014, 17:20
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Recorrer JSON con PHP

Código PHP:
Ver original
  1. foreach ($versions = $obj->versions     as $b => $v)
  2. {
  3.      foreach($v as $key => $value)
  4.      {
  5.           echo "$key : $value";                            
  6.       }                          
  7. }
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 14/08/2014, 07:44
 
Fecha de Ingreso: julio-2012
Mensajes: 18
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Recorrer JSON con PHP

Gracias alex171294 por tu sugerencia, hhs en efecto el código que pusiste me servio ya me muestra el primer nivel de versions, pero me marca error:

Notice: Array to string conversion in

Al parecer es por que en versions hay otro nivel anidado (arreglo) type.

esta es la parte json de versions:

Código JSON:
Ver original
  1. "versions": [
  2.     {
  3.       "id": 255,
  4.       "type": [
  5.         "lang_ingles",
  6.         "app",
  7.         "v1"
  8.       ],
  9.       "label": "version app ingles"
  10.     },
  11.     {
  12.       "id": 256,
  13.       "type": [
  14.         "lang_espanol",
  15.         "app",
  16.         "v2"
  17.       ],
  18.       "label": "version app espanol"
  19.     },
  20.     {
  21.       "id": 257,
  22.       "type": [
  23.         "lang_jap",
  24.         "app",
  25.         "v3"
  26.       ],
  27.       "label": "version app japones"
  28.     }
  29.   ]



Te agradeceré si puedes echarme la mano por que ya le intente y creo que ando bloqueado.

Muchas gracias por su apoyo.

Saludos

Etiquetas: json
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 03:34.