J'ai essayé d'analyser un fichier JSON avec PHP. Mais je suis coincé maintenant.
Voici le contenu de mon fichier JSON:
{
"John": {
"status":"Wait"
},
"Jennifer": {
"status":"Active"
},
"James": {
"status":"Active",
"age":56,
"count":10,
"progress":0.0029857,
"bad":0
}
}
Et voici ce que j'ai essayé jusqu'à présent:
<?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];
Mais parce que je ne connais pas les noms (comme 'John'
, 'Jennifer'
) et toutes les clés et valeurs disponibles (comme 'age'
, 'count'
), je pense avoir besoin de créer une boucle foreach.
J'apprécierais un exemple pour cela.
Pour parcourir un tableau multidimensionnel, vous pouvez utiliser 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";
}
}
Sortie:
John:
status => Wait
Jennifer:
status => Active
James:
status => Active
age => 56
count => 10
progress => 0.0029857
bad => 0
Je ne peux pas croire que tant de personnes postent des réponses sans lire le JSON correctement.
Si vous ne faites qu'itérer $json_a
seul, vous avez un objet d'objets. Même si vous transmettez true
comme deuxième paramètre, vous avez un tableau à deux dimensions. Si vous parcourez la première dimension, vous ne pouvez pas simplement faire écho à la deuxième dimension. Donc c'est faux:
foreach ($json_a as $k => $v) {
echo $k, ' : ', $v;
}
Pour faire écho aux statuts de chaque personne, essayez ceci:
<?php
$string = file_get_contents("/home/michael/test.json");
if ($string === false) {
// deal with error...
}
$json_a = json_decode($string, true);
if ($json_a === null) {
// deal with error...
}
foreach ($json_a as $person_name => $person_a) {
echo $person_a['status'];
}
?>
La solution la plus élégante:
$shipments = json_decode(file_get_contents("shipments.js"), true);
print_r($shipments);
Rappelez-vous que le fichier json doit être encodé en UTF-8 sans nomenclature. Si le fichier a une nomenclature, json_decode retournera NULL.
Alternativement:
$shipments = json_encode(json_decode(file_get_contents("shipments.js"), true));
echo $shipments;
Essayer
<?php
$string = file_get_contents("/home/michael/test.json");
$json_a=json_decode($string,true);
foreach ($json_a as $key => $value){
echo $key . ':' . $value;
}
?>
Essaye ça
$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); }
C'est complètement au-delà de moi que personne n'ait signalé que vos "balises" de départ sont fausses. Vous créez un objet avec {}, alors que vous pouvez créer un tableau avec [].
[ // <-- 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.
Avec cette modification, le JSON sera analysé comme un tableau au lieu d'un objet. Et avec ce tableau, vous pouvez faire ce que vous voulez, comme des boucles, etc.
Réponse plus standard:
$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;
Et le résultat est:
Name: John
Status = Wait
Name: Jennifer
Status = Active
Name: James
Status = Active
Age = 56
Count = 10
Progress = 0.0029857
Bad = 0
Essayer:
$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 />';
}
}
}
Parcourez le JSON avec une boucle foreach
sous forme de paires clé-valeur. Effectuez une vérification de type pour déterminer si davantage de boucles doivent être effectuées.
foreach($json_a as $key => $value) {
echo $key;
if (gettype($value) == "object") {
foreach ($value as $key => $value) {
# and so on
}
}
}
<?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'];
?>
Essayez le:
foreach ($json_a as $key => $value)
{
echo $key, ' : ';
foreach($value as $v)
{
echo $v." ";
}
}
Lorsque vous décoderez une chaîne JSON, vous obtiendrez un objet. pas un tableau. La meilleure façon de voir la structure que vous obtenez est donc de créer un var_dump du décodage. (cette var_dump peut vous aider à comprendre la structure, principalement dans les cas complexes).
<?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";
}
?>
Le moyen le plus rapide de faire écho à toutes les valeurs JSON est d'utiliser boucle en boucle, la première boucle va récupérer tous les objets et la seconde les valeurs ...
foreach($data as $object) {
foreach($object as $value) {
echo $value;
}
}
$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>";
}
}