2012-01-13 105 views
41

tengo el siguiente JSON en un archivo list.txt:PHP leer y escribir archivos de JSON

{ 
"bgates":{"first":"Bill","last":"Gates"}, 
"sjobs":{"first":"Steve","last":"Jobs"} 
} 

¿Cómo agrego "bross":{"first":"Bob","last":"Ross"} a mi archivo usando PHP?

Esto es lo que tengo hasta ahora:

<?php 

$user = "bross"; 
$first = "Bob"; 
$last = "Ross"; 

$file = "list.txt"; 

$json = json_decode(file_get_contents($file)); 

$json[$user] = array("first" => $first, "last" => $last); 

file_put_contents($file, json_encode($json)); 

?> 

Lo que me da un error fatal: no se puede utilizar objeto de tipo stdClass como un array en esta línea:

$json[$user] = array("first" => $first, "last" => $last); 

estoy usando PHP5. 2. ¿Alguna idea? ¡Gracias!

Respuesta

77

La pista está en el mensaje de error - si nos fijamos en la documentación de json_decode, tenga en cuenta que puede tomar un segundo parámetro, que controla si devuelve una matriz o un objeto, por defecto se convierte en objeto.

Así que cambia su llamada a

$json = json_decode(file_get_contents($file), true); 

y va a devolver una matriz asociativa y su código debería funcionar bien.

+3

Odio que 'json_decode' de forma predeterminada devuelva una clase en lugar de una matriz. Esto me dispara cada vez que uso 'json_decode' por primera vez en un mes. – Tim

7

Necesita hacer que la función de decodificación devuelva una matriz pasando el parámetro true.

json_decode(file_get_contents($file),true);

3

Trate de usar el segundo parámetro para la función json_decode:

$json = json_decode(file_get_contents($file), true); 
8

o simplemente utilizar $ JSON como un objeto:

$json->$user = array("first" => $first, "last" => $last); 

Esta es la forma en que se devuelve sin el segundo parámetro (como una instancia de stdClass).

3

Esto debería funcionar para que usted pueda obtener el contenido de list.txt archivo

$headers = array('http'=>array('method'=>'GET','header'=>'Content: type=application/json \r\n'.'$agent \r\n'.'$hash')); 

$context=stream_context_create($headers); 

$str = file_get_contents("list.txt",FILE_USE_INCLUDE_PATH,$context); 

$str=utf8_encode($str); 

$str=json_decode($str,true); 

print_r($str); 
+0

Acabo de recibir Array como salida de ese –

18

La muestra para la lectura y la escritura JSON en PHP:

$json = json_decode(file_get_contents($file),TRUE); 

$json[$user] = array("first" => $first, "last" => $last); 

file_put_contents($file, json_encode($json)); 
+1

El segundo argumento para json_encode no es booleano, por lo que es incorrecto escribir 'json_encode ($ json, TRUE)'. –

+0

Según los documentos (http://php.net/manual/en/function.json-decode.php), el segundo argumento ES un booleano. –

1

Cuando se desea crear formato JSON que tenía que estar en este formato para que lea:

[ 
    { 
    "":"", 
    "":[ 
    { 
     "":"", 
     "":"" 
    } 
    ] 
    } 
] 
2

Si desea visualizar los datos JSON en formato definido puede modificar el código como:

file_put_contents($file, json_encode($json,TRUE)); 


$headers = array('http'=>array('method'=>'GET','header'=>'Content: type=application/json \r\n'.'$agent \r\n'.'$hash')); 

$context=stream_context_create($headers); 

$str = file_get_contents("list.txt",FILE_USE_INCLUDE_PATH,$context); 

$str1=utf8_encode($str); 

$str1=json_decode($str1,true); 



foreach($str1 as $key=>$value) 
{ 

    echo "key is: $key.\n"; 

    echo "values are: \t"; 
     foreach ($value as $k) { 

     echo " $k. \t"; 
     # code... 
    } 
     echo "<br></br>"; 
     echo "\n"; 

} 
Cuestiones relacionadas