Como posso processar um ficheiro JSON com o PHP?
tentei processar um ficheiro JSON usando o PHP. Mas agora estou preso.
Este é o conteúdo do meu ficheiro JSON.{
"John": {
"status":"Wait"
},
"Jennifer": {
"status":"Active"
},
"James": {
"status":"Active",
"age":56,
"count":10,
"progress":0.0029857,
"bad":0
}
}
E foi isto que tentei até agora:
<?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];
Mas porque eu não sei os nomes'John'
, 'Jennifer'
) e todas as chaves e valores disponíveis (como 'age'
, 'count'
) de antemão, acho que preciso de criar um laço foreach.
Agradecia um exemplo para isto.
15 answers
Para iterar sobre um array multidimensional, pode usar Recursivearrayiterador
$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";
}
}
Resultado:
John:
status => Wait
Jennifer:
status => Active
James:
status => Active
age => 56
count => 10
progress => 0.0029857
bad => 0
Se você for um iterate {[[2]} sozinho, você tem um objeto de objetos. Mesmo que você passe em true
como segundo parâmetro, você tem um array bidimensional. Se você está fazendo looping através da primeira dimensão você não pode simplesmente ecoar a segunda dimensão assim. Então isto está errado.
foreach ($json_a as $k => $v) {
echo $k, ' : ', $v;
}
Para ecoar os estatutos de cada pessoa, tente isto:
<?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'];
}
?>
A solução mais elegante:
$shipments = json_decode(file_get_contents("shipments.js"), true);
print_r($shipments);
Lembre-se que o ficheiro json tem de ser codificado em UTF-8 sem BOM. Se o arquivo tem BOM, então json_ decode retornará nulo.
Em alternativa:
$shipments = json_encode(json_decode(file_get_contents("shipments.js"), true));
echo $shipments;
Tenta
<?php
$string = file_get_contents("/home/michael/test.json");
$json_a=json_decode($string,true);
foreach ($json_a as $key => $value){
echo $key . ':' . $value;
}
?>
[ // <-- 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.
Com esta mudança, o json será processado como um array em vez de um objecto. E com essa matriz, você pode fazer o que quiser, como loops etc.
Tenta Isto
$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); }
Tenta:
$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 />';
}
}
}
Circuito através do JSON com um laço foreach
como pares de valores-chave. Faça a verificação de tipo para determinar se mais looping precisa ser feito.
foreach($json_a as $key => $value) {
echo $key;
if (gettype($value) == "object") {
foreach ($value as $key => $value) {
# and so on
}
}
}
Mais resposta padrão:
$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;
E a saída é:
Name: John
Status = Wait
Name: Jennifer
Status = Active
Name: James
Status = Active
Age = 56
Count = 10
Progress = 0.0029857
Bad = 0
Tenta.
foreach ($json_a as $key => $value)
{
echo $key, ' : ';
foreach($value as $v)
{
echo $v." ";
}
}
<?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";
}
?>
<?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'];
?>
Tens que dar assim:
echo $json_a['John']['status'];
echo "<>"
echo $json_a['Jennifer']['status'];
br inside <>
O que dá o resultado:
wait
active
$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>";
}
}
A maneira mais rápida de ecoar todos os valores json é usando loop in loop, o primeiro loop vai obter todos os objetos e o segundo os valores...
foreach($data as $object) {
foreach($object as $value) {
echo $value;
}
}