Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Leer archivo .json con php

Estas en el tema de Leer archivo .json con php en el foro de PHP en Foros del Web. Hola a todos, Tengo un archivo .json con una serie de datos que me gustaría leer desde php. El problema es que tiene varios niveles ...

  #1 (permalink)  
Antiguo 26/11/2015, 09:02
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Leer archivo .json con php

Hola a todos,

Tengo un archivo .json con una serie de datos que me gustaría leer desde php. El problema es que tiene varios niveles y me pierdo, a ver si podéis echarme una mano.

El archivo .json tiene esta estructura...es mucho más grande que esto pero no contiene más niveles:
Código:
{
  "result" : "ok",
  "response" : {
    "description" : "All known vehicles. Each structure contains the vehicle's id, name, (optionally) class and list of all liveries",
    "list" : [
      {
        "id" : 9503224,
        "name" : "BMW 320 TC",
        "liveries" : [
          {
            "id" : 51,
            "name" : "Cassius Racing #15"
          },
          {
            "id" : 52,
            "name" : "Cassius Racing #16"
          },
          {
            "id" : 53,
            "name" : "Cassius Racing #17"
          }
        ],
        "class" : "TC2"
      },
      {
        "id" : 65306143,
        "name" : "Sauber C9 Mercedes-Benz",
        "liveries" : [
          {
            "id" : 51,
            "name" : "1989 Sauber Mercedes #61"
          },
          {
            "id" : 52,
            "name" : "1989 Sauber Mercedes #62"
          },
          {
            "id" : 53,
            "name" : "1989 Sauber Mercedes #63"
          }
        ],
        "class" : "Group C1"
      },
      {
        "id" : 143364290,
        "name" : "BMW 2002 Turbo",
        "liveries" : [
          {
            "id" : 1,
            "name" : "White"
          },
          {
            "id" : 2,
            "name" : "Silver"
          },
          {
            "id" : 3,
            "name" : "Black"
          }
        ],
        "class" : "Historic Touring 2"
      }
    ]
  }
}
Tan sólo llego hasta aquí con mi php:
Código PHP:
<?php

    $jsondata 
file_get_contents('basico.json');

    
$data json_decode($jsondatatrue);

?>
Sé que es penoso, pero es lo que hay, estoy empezando.
En fin, espero respuesta. Muchas gracias.
  #2 (permalink)  
Antiguo 26/11/2015, 10:46
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Leer archivo .json con php

Saludo.
Pues para eso se puede ya manejar como un arreglo.
Ej
Código PHP:
Ver original
  1. echo 'result '.$data['result'].'</br>';
  2. foreach($data['response']['list'] as $id=>$value)
  3.     {
  4.         echo 'List</br>';
  5.         echo $value['id'].' - '.$value['name'].'</br>';
  6.     }
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 26/11/2015, 10:58
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 15 años, 3 meses
Puntos: 46
Respuesta: Leer archivo .json con php

Hola orcajavi.

también puedes usar esto para "mapear" tus variables/objectos y así podrás ver como hacer para acceder a cada uno de sus atributos.

Código PHP:
Ver original
  1. echo("<pre>");
  2. print_r($data);
  3. echo("</pre>");

Cuando indica que es stdObject
accedes $data->result (por ejemplo)

Y cuando marca array
accedes $data["result"]


Saludos.
  #4 (permalink)  
Antiguo 26/11/2015, 13:34
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

Cita:
Iniciado por mortiprogramador Ver Mensaje
Saludo.
Pues para eso se puede ya manejar como un arreglo.
Ej
Código PHP:
Ver original
  1. echo 'result '.$data['result'].'</br>';
  2. foreach($data['response']['list'] as $id=>$value)
  3.     {
  4.         echo 'List</br>';
  5.         echo $value['id'].' - '.$value['name'].'</br>';
  6.     }
Gracias por la respuesta. Poniendo este code, me aparece el siguiente mensaje: Warning: Invalid argument supplied for foreach()

Cita:
Iniciado por lair Ver Mensaje
Hola [URL="http://www.forosdelweb.com/miembros/orcajavi/"]orcajavi[/URL].

también puedes usar esto para "mapear" tus variables/objectos y así podrás ver como hacer para acceder a cada uno de sus atributos.

Código PHP:
Ver original
  1. echo("<pre>");
  2. print_r($data);
  3. echo("</pre>");

Cuando indica que es stdObject
accedes $data->result (por ejemplo)

Y cuando marca array
accedes $data["result"]


Saludos.
Gracias por la respuestas...pero como he dicho soy muy nuevo en esto y no he entendido nada. He puesto tu code pero la página se queda en blanco.

Un saludo.
  #5 (permalink)  
Antiguo 26/11/2015, 13:57
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Leer archivo .json con php

Saludo.
Por ahora hacer un print_r a la variable que tiene el contenido del json,
y postearlo aquí.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #6 (permalink)  
Antiguo 28/11/2015, 06:35
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

Lo siento, no hace nada:

Código PHP:
<?php
   
    $jsondata 
file_get_contents('liveries.json');
    
$data json_decode($jsondatatrue);
    
echo(
"<pre>");
print_r($data);
echo(
"</pre>");

?>
Ejecuto y se queda la pantalla en blanco.
  #7 (permalink)  
Antiguo 28/11/2015, 09:51
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Leer archivo .json con php

Saludo.
Entonces un print_r a $jsondata.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #8 (permalink)  
Antiguo 28/11/2015, 12:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Leer archivo .json con php

¿Y al menos el archivo .json está en el mismo lugar que el script que lo lee?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 28/11/2015, 14:29
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

sí, están en la misma carpeta. De hecho, si en el print_r pongo la variable $jsondata en lugar de $data, me aparece el json al completo pero sin ningún formato establecido (salen todos los datos del json sin espacios.
  #10 (permalink)  
Antiguo 28/11/2015, 15:21
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Leer archivo .json con php

Saludo.
Intentar sin el true, solo el primer parámetro y nuevamente el print_r a la última variable.

__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #11 (permalink)  
Antiguo 29/11/2015, 02:55
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

Nada, quitando el true y la última variable hace lo mismo: pantalla en blanco. Usando la primera variable, me aparece el json al completo tal cual está con sus {} y []
  #12 (permalink)  
Antiguo 29/11/2015, 03:55
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Leer archivo .json con php

Buenas,

Es raro, ¿tienes más código en el mismo php o en algún include/require? ¿puede ser que algo esté dando error?

Prueba a poner el reporte de errores al inicio del script:
Código PHP:
<?php
error_reporting
(E_ALL E_STRICT);
ini_set('display_errors'true);

$jsondata file_get_contents('liveries.json');
$data     json_decode($jsondatatrue);

echo(
"<pre>");
print_r($data);
echo(
"</pre>");
?>
Porque el código en si está bien y da la salida correctamente.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #13 (permalink)  
Antiguo 29/11/2015, 04:05
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

El archivo lo único que tiene es lo que he puesto antes, no tiene más porque lo empecé de 0. Acabo de probar tu código y me hace lo mismo (pantalla en blanco).

La página no está en el directorio raiz, están en una subcapeta de nivel 3, pero tanto el php para leer el json como el propio json están en la misma carpeta.

¿Puede ser algo de configuración?
  #14 (permalink)  
Antiguo 29/11/2015, 04:14
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Leer archivo .json con php

Comprueba en el phpinfo() si tienes el modulo de json activado
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #15 (permalink)  
Antiguo 29/11/2015, 05:26
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

Está activado
Código:
json

json support	enabled
json version	1.2.1
  #16 (permalink)  
Antiguo 29/11/2015, 05:51
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Leer archivo .json con php

Uhmm...

Vamos a probar algo directo, es por descartar cosas.
Código PHP:
<?php var_dump(json_decode('{"reviewer": "Pam", "stars": 3, "text": "Json"}'true)) ?>
Debería dar una salida así:
Código:
array(3) { ["reviewer"]=> string(3) "Pam" ["stars"]=> int(3) ["text"]=> string(4) "Json" }
Está claro que file_get_contents funciona.

Con un array pequeño, si sale, el problema podría ser por la configuración del tamaño de memoria...
Código PHP:
ini_set('memory_limit''1024M'); 
A ver si va por ahí la cosa.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #17 (permalink)  
Antiguo 29/11/2015, 14:37
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

Efectivamente, poniendo ese código, veo el array.....

Si pongo en mi código el ini_set, sigue sin hacer nada (página en blanco)
  #18 (permalink)  
Antiguo 30/11/2015, 11:37
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Leer archivo .json con php

Saludo.
¿Y probando con un archivo json nuevo y dandole los datos
que ya probaron directo?
Tal vez sea algo en la codificación al guardar del archivo original.

__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #19 (permalink)  
Antiguo 30/11/2015, 11:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Leer archivo .json con php

Prueba así y nos dices:
Código PHP:
Ver original
  1. <?php
  2.  
  3.     if (!file_exists('basico.json')) {
  4.         die('El archivo ni siquiera existe.');
  5.     }
  6.  
  7.     $jsondata = file_get_contents('basico.json');
  8.  
  9.     $data = json_decode($jsondata, true);
  10.  
  11.     var_dump($data);
  12.  
  13. ?>

¿Qué te muestra?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #20 (permalink)  
Antiguo 01/12/2015, 16:37
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Qué te muestra?
Muestra:

NULL
  #21 (permalink)  
Antiguo 01/12/2015, 16:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Leer archivo .json con php

Excelente, entonces sí hay un error al usar json_decode(), así que por favor depura después el valor de json_last_error() para que veas cual fue el problema.

Código PHP:
Ver original
  1. <?php
  2.  
  3.     if (!file_exists('basico.json')) {
  4.         die('El archivo ni siquiera existe.');
  5.     }
  6.  
  7.     $jsondata = file_get_contents('basico.json');
  8.  
  9.     $data = json_decode($jsondata, true);
  10.  
  11.     var_dump($data, json_last_error());
  12.  
  13. ?>

¿Y ahora qué te muestra?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #22 (permalink)  
Antiguo 01/12/2015, 17:23
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

Pues ahora dice:

NULL int(5)
  #23 (permalink)  
Antiguo 01/12/2015, 17:27
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Leer archivo .json con php

¡Bingo!

Pues ahora ya sabemos que sí hay un error al leer el JSON.

¿Cual es el error exactamente?

Bueno, pues te toca leer el siguiente manual: http://php.net/json_last_error

Ahí viene la lista de códigos de error, y dado que obtienes el código de error 5 seguro entenderás.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #24 (permalink)  
Antiguo 02/12/2015, 06:45
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

Gracias, he añadido el codigo de switch que viene en la página que me has indicado y me dice lo siguiente:

NULL int(5) - Caracteres UTF-8 malformados, posiblemente están mal codificados

Sin embargo, si cojo los datos del json y los copio en http://jsonviewer.stack.hu/ me lee el json perfectamente y no me indica ningún tipo de error.

Estoy más perdido que el barco del arroz
  #25 (permalink)  
Antiguo 02/12/2015, 06:50
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Leer archivo .json con php

Saludo.
Entonces publica aquí el json completo, la vez pasada publicaste solo parte del mismo, tal vez sea algo en particular que este dando la novedad, y al publicarlo, fijate que logre quedar identico, pues a veces al publicar copiando y pegando quedan espacios, etc.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #26 (permalink)  
Antiguo 02/12/2015, 07:11
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

Correcto, no lo publiqué entero porque es muy largo y no veo cómo ponerlo en spoiler. Antes de colgarlo entero, avisando de que es muy largo, hay forma de ocultarlo para que no sea tan molesto al resto de usuario?
  #27 (permalink)  
Antiguo 02/12/2015, 07:12
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

Tiene 10.000 lineas
  #28 (permalink)  
Antiguo 02/12/2015, 08:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Leer archivo .json con php

Bueno, tampoco es para que pongas todo ese código aquí y estoy de acuerdo.

¿No conoces servicios externos como Pastebin y similares?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #29 (permalink)  
Antiguo 02/12/2015, 09:22
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Leer archivo .json con php

La verdad es que no lo conocía, gracias, algo nuevo aprendido, jeje.

dejo el enlace del archivo: [URL]http://pastebin.com/VM687dLb[/URL]
  #30 (permalink)  
Antiguo 02/12/2015, 11:00
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Leer archivo .json con php

Saludo.
Pues acabo de probar, y me funciona sin problema.
¿Cuál editor de código se esta usando?
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

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 22:34.