decode file json

solari77

Utente Attivo
6 Ott 2016
119
1
18
Ciao a tutti.
ho un file .json cosi costituito:

JSON:
[
    {
        "firstname": "test_nome",
        "lastname": "test_cognome",
        "pdf_link": "http:\/\/www.miosito.it\/stage-2018-cx\/marmo3\/pdf\/test_nome_test_cognome_5eef632ab3e3a.pdf",
        "stage": "{\"size\":{\"width\":\"800\",\"height\":\"500\"},\"materiale\":\"rosa\",\"decoration\":{\"type\":\"staffe\",\"count\":4,\"margin\":{\"top\":\"25\",\"left\":\"22\"}},\"items\":[{\"type\":\"Image\",\"path\":\"path1\",\"name\":\"https:\/\/www.miosito.it\/stage-2018-cx\/marmo3\/images\/path1\/img1.jpeg\",\"margin\":{\"top\":403,\"left\":348}},{\"type\":\"Image\",\"path\":\"path2\",\"name\":\"https:\/\/www.miosito.it\/stage-2018-cx\/marmo3\/images\/path2\/img12.jpeg\",\"margin\":{\"top\":404,\"left\":591}},{\"type\":\"Image\",\"path\":\"path4\",\"name\":\"https:\/\/www.miosito.it\/stage-2018-cx\/marmo3\/images\/path4\/img32.jpeg\",\"margin\":{\"top\":346,\"left\":128}},{\"type\":\"Image\",\"path\":\"path7\",\"name\":\"https:\/\/www.miosito.it\/stage-2018-cx\/marmo3\/images\/path7\/img1.jpg\",\"margin\":{\"top\":259,\"left\":659.5}},{\"type\":\"Image\",\"path\":\"path7\",\"name\":\"https:\/\/www.miosito.it\/stage-2018-cx\/marmo3\/images\/path7\/img2.png\",\"margin\":{\"top\":262,\"left\":411.5}},{\"type\":\"Image\",\"path\":\"path8\",\"name\":\"https:\/\/www.miosito.it\/stage-2018-cx\/marmo3\/images\/path8\/img1.jpeg\",\"margin\":{\"top\":208,\"left\":195}},{\"type\":\"Text\",\"text\":\"prova test 2\",\"margin\":{\"top\":84.99999999999997,\"left\":540.9999999999995},\"fontFamily\":\"Arial Narrow Bold\",\"fontSize\":\"25\"},{\"type\":\"Text\",\"text\":\"prova test 1\",\"margin\":{\"top\":64,\"left\":224.99999999999974},\"fontFamily\":\"sans-serif\",\"fontSize\":\"22\"}]}"
    }  
]
ora stò provando con queste istruzioni
PHP:
$string=file_get_contents('data.json', 'r');
$json_o=json_decode($string,true);
foreach($json_o as $p)
{
  echo 'Nome: '.$p[firstname]."<br>";
  echo 'Cognome: '.$p[lastname]."<br>";
  echo 'PDF: '.$p[pdf_link]."<br>";  
}
però non sò come accedere alle informazioni racchiuse dentro al tag "stage".
Per "accedere" intendo in modo separato.
dovrei ottenere:
base
altezza
materiale
poi per decoration
tipo -----> margin top, margine left
poi se tipo è Image , allora --------> nome del file ,margin top, margine left
infine se Type è Text --------> il testo,margin top, margine left,fontFamily,fontSize

qualcuno mi può aiutare ?
grazie a tutti in anticipo
 

macus_adi

Utente Attivo
5 Dic 2017
1.302
87
48
IT/SW
Abbastanza facile scorrere stage con un nuovo ciclo....
PHP:
foreach($json_o as $p)
{
  echo 'Nome: '.$p[firstname]."<br>";
  echo 'Cognome: '.$p[lastname]."<br>";
  echo 'PDF: '.$p[pdf_link]."<br>"; 

    foreach($p['stage'] as $k=>$v){
        echo $k.':'.$v.'<br>';
    }

}
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
ciao e grazie per la risposta.

mi da Warning: Invalid argument supplied for foreach() alla riga --->foreach($p[stage] as $k=>$v)
sia mettendo
foreach($p['stage']
con apici che
foreach($p[stage]
senza apici
 

macus_adi

Utente Attivo
5 Dic 2017
1.302
87
48
IT/SW
con apici che
foreach($p[stage]
senza apic
Sicuro che si chiami in quel modo e che soprattutto sia presente l'i-esimo elemento controllato???

altrimenti dovresti verificare per ogni elemento l'esistenza di stage in questo modo...
PHP:
foreach($json_o as $p)
{
  echo 'Nome: '.$p[firstname]."<br>";
  echo 'Cognome: '.$p[lastname]."<br>";
  echo 'PDF: '.$p[pdf_link]."<br>";


   if(isset($p['stage']))
      {
       foreach($p['stage'] as $k=>$v){
             echo $k.':'.$v.'<br>';
    }
}

}
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
ciao il file json è quello che ho indicato nel primo post. " stage" è presente.
ho aggiunto altri dati al json senza "stage". In questo caso con l'ultimo codice che mi hai inviato, dove non è presente stage non da nessun errore , mentre dove è presente "stage" continua a dare l'errore: Warning: Invalid argument supplied for foreach() .
ti allego il file .json , magari per capire meglio
 

Allegati

macus_adi

Utente Attivo
5 Dic 2017
1.302
87
48
IT/SW
Ok... prova con questo
PHP:
$json_o=json_decode(file_get_contents('data.json'),true);
function print_rR($data){
   if(is_array($data)){
      foreach ($data as $k=>$v){
         if(is_array($v))print_rR($v);
         else{
            echo $k.':'.$v."\r\n";
         }
      }
   }
}

foreach($json_o as $p)
{
   echo 'Nome: '.$p['firstname']."<br>";
   echo 'Cognome: '.$p['lastname']."<br>";
   echo 'PDF: '.$p['pdf_link']."<br>";

   if(isset($p['stage']))
   {
      print_rR(json_decode($p['stage'],true));
   }
}
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
ciao e ancora grazie per la cortese risposta.
ora non dà più l'errore.
L'unica cosa è che esce una stringa comprensiva di tutto, mentre io dovrei dividere per le varie etichette.
Come scritto all'inizio, non sò come estrarre in modo separato
base .......
altezza ......
materiale ........
poi per decoration
tipo -----> margin top ...... , margine left ..............
poi se tipo è Image , allora --------> nome del file ........... ,margin top ............, margine left ............
infine se Type è Text --------> il testo .............,margin top ..........., margine left .............,fontFamily ..........,fontSize .........
 

macus_adi

Utente Attivo
5 Dic 2017
1.302
87
48
IT/SW
L'analisi del json non l'ho fatta, quindi per chiavi custom dovresti essere tu a scorrere l'array per come ti serve!
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
Ok, questo è quello che chiedevo all'inizio del post. Non so' come accedere alle varie chiavi di "stage"