servicios - variable json php
¿Cómo puedo analizar un archivo JSON con PHP? (15)
Cuando decodifiques una cadena json, obtendrás un objeto. No es una matriz. Entonces, la mejor manera de ver la estructura que está obteniendo es hacer un var_dump de la decodificación. (este var_dump puede ayudarlo a comprender la estructura, principalmente en casos complejos).
<?php
$json = file_get_contents(''/home/michael/test.json'');
$json_a = json_decode($json);
var_dump($json_a); // just to see the structure. It will help you for future cases
echo "/n";
foreach($json_a as $row){
echo $row->status;
echo "/n";
}
?>
Intenté analizar un archivo JSON usando PHP. Pero ahora estoy atascado.
Este es el contenido de mi archivo JSON:
{
"John": {
"status":"Wait"
},
"Jennifer": {
"status":"Active"
},
"James": {
"status":"Active",
"age":56,
"count":10,
"progress":0.0029857,
"bad":0
}
}
Y esto es lo que he intentado hasta ahora:
<?php
$string = file_get_contents("/home/michael/test.json");
$json_a = json_decode($string, true);
echo $json_a[''John''][status];
echo $json_a[''Jennifer''][status];
Pero como no sé los nombres (como ''John''
, ''Jennifer''
) y todas las claves y valores disponibles (como ''age''
, ''count''
) de antemano, creo que necesito crear un bucle foreach.
Apreciaría un ejemplo para esto.
Es completamente ajeno a mí que nadie haya señalado que sus "etiquetas" iniciales están equivocadas. Estás creando un objeto con {}, mientras que puedes crear una matriz con [].
[ // <-- Note that I changed this
{
"name" : "john", // And moved the name here.
"status":"Wait"
},
{
"name" : "Jennifer",
"status":"Active"
},
{
"name" : "James",
"status":"Active",
"age":56,
"count":10,
"progress":0.0029857,
"bad":0
}
] // <-- And this.
Con este cambio, el json se analizará como una matriz en lugar de un objeto. Y con esa matriz, puedes hacer lo que quieras, como bucles, etc.
Intentalo:
foreach ($json_a as $key => $value)
{
echo $key, '' : '';
foreach($value as $v)
{
echo $v." ";
}
}
La forma más rápida de repetir todos los valores json es usar un bucle en bucle, el primer bucle obtendrá todos los objetos y el segundo los valores ...
foreach($data as $object) {
foreach($object as $value) {
echo $value;
}
}
La solución más elegante:
$shipments = json_decode(file_get_contents("shipments.js"), true);
print_r($shipments);
Recuerde que el archivo json debe estar codificado en UTF-8 sin BOM. Si el archivo tiene BOM, entonces json_decode devolverá NULL.
Alternativamente:
$shipments = json_encode(json_decode(file_get_contents("shipments.js"), true));
echo $shipments;
No puedo creer que tantas personas publiquen respuestas sin leer el JSON correctamente.
Si se $json_a
iterar $json_a
solo, tiene un objeto de objetos. Incluso si pasa en true
como el segundo parámetro, tiene una matriz bidimensional. Si recorres la primera dimensión, no puedes repetir la segunda dimensión de esa manera. Así que esto está mal:
foreach ($json_a as $k => $v) {
echo $k, '' : '', $v;
}
Para hacer eco de los estados de cada persona, intente esto:
<?php
$string = file_get_contents("/home/michael/test.json");
$json_a = json_decode($string, true);
foreach ($json_a as $person_name => $person_a) {
echo $person_a[''status''];
}
?>
Para iterar sobre una matriz multidimensional, puede usar RecursiveArrayIterator
$jsonIterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator(json_decode($json, TRUE)),
RecursiveIteratorIterator::SELF_FIRST);
foreach ($jsonIterator as $key => $val) {
if(is_array($val)) {
echo "$key:/n";
} else {
echo "$key => $val/n";
}
}
Salida:
John:
status => Wait
Jennifer:
status => Active
James:
status => Active
age => 56
count => 10
progress => 0.0029857
bad => 0
Prueba esto
$json_data = ''{ "John": { "status":"Wait" }, "Jennifer": { "status":"Active" }, "James": { "status":"Active", "age":56, "count":10, "progress":0.0029857, "bad":0 } }''; $decode_data = json_decode($json_data); foreach($decode_data as $key=>$value){ print_r($value); }
Recorra el JSON con un bucle foreach
como pares clave-valor. Realice una comprobación de tipos para determinar si es necesario realizar más bucles.
foreach($json_a as $key => $value) {
echo $key;
if (gettype($value) == "object") {
foreach ($value as $key => $value) {
# and so on
}
}
}
Respuesta más estándar:
$jsondata = file_get_contents(PATH_TO_JSON_FILE."/jsonfile.json");
$array = json_decode($jsondata,true);
foreach($array as $k=>$val):
echo ''<b>Name: ''.$k.''</b></br>'';
$keys = array_keys($val);
foreach($keys as $key):
echo '' ''.ucfirst($key).'' = ''.$val[$key].''</br>'';
endforeach;
endforeach;
Y la salida es:
Name: John
Status = Wait
Name: Jennifer
Status = Active
Name: James
Status = Active
Age = 56
Count = 10
Progress = 0.0029857
Bad = 0
Tienes que dar así:
echo $json_a[''John''][''status''];
echo "<>"
echo $json_a[''Jennifer''][''status''];
br inside <>
Lo que da el resultado:
wait
active
Tratar
<?php
$string = file_get_contents("/home/michael/test.json");
$json_a=json_decode($string,true);
foreach ($json_a as $key => $value){
echo $key . '':'' . $value;
}
?>
Tratar:
$string = file_get_contents("/home/michael/test.json");
$json = json_decode($string, true);
foreach ($json as $key => $value) {
if (!is_array($value)) {
echo $key . ''=>'' . $value . ''<br />'';
} else {
foreach ($value as $key => $val) {
echo $key . ''=>'' . $val . ''<br />'';
}
}
}
$json_a = json_decode($string, TRUE);
$json_o = json_decode($string);
foreach($json_a as $person => $value)
{
foreach($value as $key => $personal)
{
echo $person. " with ".$key . " is ".$personal;
echo "<br>";
}
}
<?php
$json = ''{
"response": {
"data": [{"identifier": "Be Soft Drinker, Inc.", "entityName": "BusinessPartner"}],
"status": 0,
"totalRows": 83,
"startRow": 0,
"endRow": 82
}
}'';
$json = json_decode($json, true);
//echo ''<pre>''; print_r($json); exit;
echo $json[''response''][''data''][0][''identifier''];
$json[''response''][''data''][0][''entityName'']
echo $json[''response''][''status''];
echo $json[''response''][''totalRows''];
echo $json[''response''][''startRow''];
echo $json[''response''][''endRow''];
?>