online leer json_decode example ejemplo con php object json

json_decode - leer json con php



¿Cómo decodificar una cadena JSON con varios objetos en PHP? (2)

Sé cómo decodificar una cadena JSON con un objeto con su ayuda de este ejemplo Cómo decodificar una cadena JSON

Pero ahora me gustaría mejorar la decodificación de cadenas JSON con varios objetos y no puedo entender cómo hacerlo.

Aquí hay un ejemplo:

{ "inbox": [ { "firstName": "Brett", "lastName":"McLaughlin" }, { "firstName": "Jason", "lastName":"Hunter" }, { "firstName": "Elliotte", "lastName":"Harold" } ], "sent": [ { "firstName": "Isaac", "lastName": "Asimov" }, { "firstName": "Tad", "lastName": "Williams" }, { "firstName": "Frank", "lastName": "Peretti" } ], "draft": [ { "firstName": "Eric", "lastName": "Clapton" }, { "firstName": "Sergei", "lastName": "Rachmaninoff" } ] }

  1. ¿Cómo hacer solo un foreach () para decodificar por encima de la cadena JSON?
  2. ¿Cómo detectar los nombres de los objetos: bandeja de entrada, enviado o borrador en este foreach ()?

Nueva respuesta

Con respecto a su pregunta revisada: foreach realidad trabaja con propiedades, así como con elementos de muchos valores (arreglos), detalles aquí . Así, por ejemplo, con la cadena JSON en tu pregunta:

$data = json_decode($json); foreach ($data as $name => $value) { // This will loop three times: // $name = inbox // $name = sent // $name = draft // ...with $value as the value of that property }

Dentro de su bucle principal sobre las propiedades, puede usar un bucle interno para recorrer las entradas de la matriz a las que apunta cada propiedad. Entonces, por ejemplo, si sabe que cada una de las propiedades de nivel superior tiene un valor de matriz, y que cada entrada de matriz tiene una propiedad de "primer nombre", este código:

$data = json_decode($json); foreach ($data as $name => $value) { echo $name . '':'' foreach ($value as $entry) { echo '' '' . $entry->firstName; } }

...Mostrará:

inbox: Brett Jason Elliotte sent: Issac Tad Frank draft: Eric Sergei

Vieja respuesta (s)

Comience a editar Re su comentario:

¡Ahora me gustaría saber cómo decodificar la cadena JSON con varios objetos!

El ejemplo que publicaste tiene varios objetos, solo están todos contenidos dentro de un objeto contenedor. Este es un requisito de JSON ; no puedes (por ejemplo) hacer esto:

{"name": "I''m the first object"}, {"name": "I''m the second object"}

Ese JSON no es válido. Tiene que haber un solo objeto de nivel superior. Simplemente podría contener una matriz:

{"objects": [ {"name": "I''m the first object"}, {"name": "I''m the second object"} ]}

... o por supuesto puede dar nombres a los objetos individuales:

{ "obj0": {"name": "I''m the first object"}, "obj1": {"name": "I''m the second object"} }

Edición final

Su ejemplo es un objeto que contiene tres propiedades, el valor de cada una de las cuales es una matriz de objetos. De hecho, no es muy diferente del ejemplo en la pregunta que vinculó (que también tiene un objeto con propiedades que tienen valores de matriz).

Asi que:

$data = json_decode($json); foreach ($data->programmers as $programmer) { // ...use $programmer for something... } foreach ($data->authors as $author) { // ...use $author for something... } foreach ($data->musicians as $musician) { // ...use $musician for something... }


Puede usar la función json_decode para decodificar la cadena JSON:

$json = <<<JSON { "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin" }, { "firstName": "Jason", "lastName":"Hunter" }, { "firstName": "Elliotte", "lastName":"Harold" } ], "authors": [ { "firstName": "Isaac", "lastName": "Asimov" }, { "firstName": "Tad", "lastName": "Williams" }, { "firstName": "Frank", "lastName": "Peretti" } ], "musicians": [ { "firstName": "Eric", "lastName": "Clapton" }, { "firstName": "Sergei", "lastName": "Rachmaninoff" } ] } JSON; $data = json_decode($json);


Luego, para ver cómo se ven los datos, puedes volcarlos:

var_dump($data);


Y verás que tienes un objeto que contiene tres matrices, cada una con otros subobjetos:

object(stdClass)[1] public ''programmers'' => array 0 => object(stdClass)[2] public ''firstName'' => string ''Brett'' (length=5) public ''lastName'' => string ''McLaughlin'' (length=10) 1 => object(stdClass)[3] public ''firstName'' => string ''Jason'' (length=5) public ''lastName'' => string ''Hunter'' (length=6) ... public ''authors'' => array 0 => object(stdClass)[5] public ''firstName'' => string ''Isaac'' (length=5) public ''lastName'' => string ''Asimov'' (length=6) ...

Lo que significa que sabes cómo acceder a tus datos.


Por ejemplo, para mostrar la lista de los programadores, puede utilizar:

foreach ($data->programmers as $programmer) { echo $programmer->firstName . '' '' . $programmer->lastName . ''<br />''; }


Lo que te daría la siguiente salida:

Brett McLaughlin Jason Hunter Elliotte Harold