¿Por qué no funciona ?: decodificando json en una matriz php

$json = file_get_contents('outputsjson.php');

El archivo codifica una matriz y luego simplemente lo repite como este (y echo $json genera esto):

{"theList":{"1":{"name":"DSC04156.JPG","title":"DSC04156.JPG","width":3264},"2":{"name":"DSC04157.JPG","title":"DSC04157.JPG","width":3264},"3":{"name":"DSC04158.JPG","title":"DSC04158.JPG","width":3264},"4":{"name":"DSC04159.JPG","title":"DSC04159.JPG","width":3264}}} 

Ahora estoy tratando de decodificarlo desde otra página como esta:

$myarray = json_decode($json, true);

print_r($myarray);

Esto no genera nada, no hay errores, ¡nada!

preguntado el 16 de mayo de 11 a las 18:05

¿Tiene errores de apagar en el php.ini? -

¡¿Cómo formaste este json ?! a mano supongo? sus comillas dobles no se escapan! -

No es que esto le ayude en nada, pero ¿por qué le está diciendo a json_decode que convierta el objeto en una matriz asociativa? -

¿Ha intentado mostrar informes de errores a E_STRICT ¿o algo? -

@Chad, ¿qué obtienes si lo haces? echo $json? -

3 Respuestas

Prueba esto en su lugar (estás mezclando " y ' [comillas simples en lugar de comillas dobles en la cadena]):

$json = '{"theList":{"1":{"name":"DSC04156.JPG","title":"DSC04156.JPG","width":3264},"2":{"name":"DSC04157.JPG","title":"DSC04157.JPG","width":3264},"3":{"name":"DSC04158.JPG","title":"DSC04158.JPG","width":3264},"4":{"name":"DSC04159.JPG","title":"DSC04159.JPG","width":3264}}} ';

$myarray = json_decode($json, true);

print_r($myarray);

Y tu resultado:

Array
(
    [theList] => Array
        (
            [1] => Array
                (
                    [name] => DSC04156.JPG
                    [title] => DSC04156.JPG
                    [width] => 3264
                )

            [2] => Array
                (
                    [name] => DSC04157.JPG
                    [title] => DSC04157.JPG
                    [width] => 3264
                )

            [3] => Array
                (
                    [name] => DSC04158.JPG
                    [title] => DSC04158.JPG
                    [width] => 3264
                )

            [4] => Array
                (
                    [name] => DSC04159.JPG
                    [title] => DSC04159.JPG
                    [width] => 3264
                )

        )

)

contestado el 16 de mayo de 11 a las 22:05

lo siento, no lo expliqué claramente, he actualizado la pregunta. - Chad

RESUELTO. Lo que pasó fue que tuve un etiqueta (solo la etiqueta, sin contenido) antes del json en el archivo que se hace eco del json. Aunque parezca extraño, no apareció en el valor de file_get_contents (); Muy raro. - Chad

lol bueno, no se mostraría a menos que no estuvieras en un navegador :-) me alegro de que lo hayas resuelto - Naftali alias Neal

sí, eso fue extraño. un error bastante obvio, asegúrese de ver la fuente cuando haga un eco / impresión, o haga un htmlspecialchars($json) sobre la cosa a imprimir .. - fbstj

Intente envolver la cadena json entre comillas simples en lugar de comillas dobles:

$json = '{"theList":{"1":{"name":"DSC04156.JPG","title":"DSC04156.JPG","width":3264},"2":{"name":"DSC04157.JPG","title":"DSC04157.JPG","width":3264},"3":{"name":"DSC04158.JPG","title":"DSC04158.JPG","width":3264},"4":{"name":"DSC04159.JPG","title":"DSC04159.JPG","width":3264}}}';

contestado el 16 de mayo de 11 a las 22:05

No tuve problemas para ejecutar el siguiente código:

$json = '{"theList":{"1":{"name":"DSC04156.JPG","title":"DSC04156.JPG","width":3264},"2":{"name":"DSC04157.JPG","title":"DSC04157.JPG","width":3264},"3":{"name":"DSC04158.JPG","title":"DSC04158.JPG","width":3264},"4":{"name":"DSC04159.JPG","title":"DSC04159.JPG","width":3264}}}';
$myarray = json_decode($json, true);
print_r($myarray);

Supongo que el archivo desde el que está intentando leer no existe. Recuerde que, si está utilizando Linux, los nombres de los archivos distinguen entre mayúsculas y minúsculas. Utilizar el file_exists() función para comprobar esto:

var_dump(file_exists('outputsjson.php'));

contestado el 16 de mayo de 11 a las 22:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.