2015-08-11 8 views
6

Ciao Sono nuovo di PHP, ma sono riuscito ad arrivare a questo punto nelle mie esigenze:Ho bisogno di visualizzare solo una parte di un oggetto JSON codificato

Sto cercando di visualizzare solo una parte di un JSON oggetto decodificato. Ho chiamato l'oggetto $Results.

posso usare con successo var_dump ($Results); e quindi ottenere i risultati completi come segue:

object(stdClass)[2] 
    public '0' => 
    object(stdClass)[3] 
     public 'forename_1' => string 'JAMES' (length=5) 
     public 'middle1_1' => string '' (length=0) 
     public 'middle2_1' => string '' (length=0) 
     public 'middle3_1' => string '' (length=0) 
     public 'surname_1' => string 'TURNER' (length=7)  
    public 'Status' => int 100 

ho quindi inserire questo in una tabella utilizzando il seguente codice:

<html> 
<form id="client-details" action="/details.php" method="post"> 
    <table> 
    <thead> 
     <tr> 
      <th>First Name</th> 
      <th>Surname</th> 
      <th>Search</th> 
     </tr> 
    </thead> 
<?php foreach($Results as $o):?> 
<tr> 
    <td id="forename"><?= $o->forename_1 ?></td> 
    <td id="surname"><?= $o->surname_1 ?></td> 
    <td><button type="submit" >More Info</button></td> 
</tr> 
<?php endforeach; ?> 
</table></form> 
</html> 

Heres il problema Quando visualizzo i risultati viene visualizzato il seguente errore: "Avviso: tentativo di ottenere la proprietà di non oggetto .."

Questo sembra essere perché sto cercando di eseguire la parte dell'oggetto public 'Status' => int 100.

Quindi la mia domanda è: Come faccio a impedire alla tabella di tentare di popolare lo 'stato' o come lo ignoro completamente?

MODIFICA: Se volessi, potrei ottenere i risultati dallo json_decode come un array associativo anziché come oggetti ... questo mi aiuterebbe a ignorare l'array/lo stato 'status'?

+0

Guarda il codice quando recuperi i tuoi risultati – wilson

+0

il tuo 'var_dump' mostra semplicemente' $ Result' ha un altro oggetto a '0' quindi non puoi accedere in questo modo –

+0

@wilson - Ho controllato il codice quando ho recuperato i risultati: '$ Results = json_decode ($ Results);' Quello che potrei fare è restituire il JSON come array associativo dicendo '$ Results = json_decode ($ Results, true);'? – BLev80

risposta

3

Penso che tu abbia sbagliato. Quello che stai facendo è iterare attraverso tutte le variabili dell'oggetto, cioè in primo luogo ottieni la variabile pubblica 0 (che è anche un oggetto) e nella seconda esecuzione dell'istruzione per ottenere la variabile Status e il valore di 'Status' è int e non ha proprietà denominate 'forename_1' e così via si ottiene l'errore che la proprietà non esiste.

Se davvero si vuole far funzionare tutto questo è necessario modificare la struttura dell'oggetto JSON in modo da poter scorrere ATTRAVERSO la lista delle persone che si desidera visualizzare, come:

object(stdClass)[2] 
    public 'list' => 
    array(0 => 
     object(stdClass)[3] 
      public 'forename_1' => string 'JAMES' (length=5) 
      public 'middle1_1' => string '' (length=0) 
      public 'middle2_1' => string '' (length=0) 
      public 'middle3_1' => string '' (length=0) 
      public 'surname_1' => string 'TURNER' (length=7)  
      public 'Status' => int 100, 
     1 => 
     object(stdClass)[3] 
      public 'forename_1' => string 'JAMES' (length=5) 
      public 'middle1_1' => string '' (length=0) 
      public 'middle2_1' => string '' (length=0) 
      public 'middle3_1' => string '' (length=0) 
      public 'surname_1' => string 'TURNER' (length=7)  
      public 'Status' => int 100, 
     2 => 
     object(stdClass)[3] 
      public 'forename_1' => string 'JAMES' (length=5) 
      public 'middle1_1' => string '' (length=0) 
      public 'middle2_1' => string '' (length=0) 
      public 'middle3_1' => string '' (length=0) 
      public 'surname_1' => string 'TURNER' (length=7)  
      public 'Status' => int 100 
    ) 

EDIT:

se non si è in grado o non si desidera modificare la struttura dati, ottenere il risultato della funzione chiama json_decode come array associativo e nell'istruzione foreach verificare se il campo richiesto esiste:

$Result = json_decode($data, true); 

<?php foreach($Results as $o):?> 
    <?php if(isset($o['forename_1']) && isset($o['surname_1'])): ?> 
     <tr> 
      <td id="forename"><?= $o['forename_1'] ?></td> 
      <td id="surname"><?= $o['surname_1'] ?></td> 
      <td><button type="submit" >More Info</button></td> 
     </tr> 
    <?php endif; ?> 
<?php endforeach; ?> 
+0

Questo è un commento molto utile! nel mio caso specifico, non posso farlo anche se :(--- Ottengo l'oggetto direttamente da un webservice dei fornitori e non voglio ricostruire alcun dato o risultato prima di usarli. – BLev80

0

Prova questo:

<html> 
    <form id="client-details" action="/details.php" method="post"> 
     <table> 
     <thead> 
      <tr> 
       <th>First Name</th> 
       <th>Surname</th> 
       <th>Search</th> 
      </tr> 
     </thead> 
    <?php foreach($Results as $o=>$v){?> 
    <tr> 
     <td id="forename"><?= $v->forename_1 ?></td> 
     <td id="surname"><?= $v->surname_1 ?></td> 
     <td><button type="submit" >More Info</button></td> 
    </tr> 
    <?php } ?> 
    </table></form> 
    </html> 
+0

Ho provato questo - senza fortuna - Lo stato 'continua a tentare di iterare – BLev80

0

tenta di stampare in questo modo:

<?php foreach($Results as $o):?> 
<tr> 
    <td id="forename"><?= $o['forename_1']; ?></td> 
    <td id="surname"><?= $o['surname_1'] ?></td> 
    <td><button type="submit" >More Info</button></td> 
</tr> 
<?php endforeach; ?> 
1

Ho trovato una soluzione accettabile! Aggiungendo true dentro la linea json_decode:

$Results = json_decode($serviceResponse, true); 

torno il risultato come un array associativo invece di un oggetto.

Ho poi cambiato il codice all'interno di ogni <tr> come segue:

<html> 
.... (rest of code here) 
<?php foreach($Results as $person):?> 
     <tr> 
      <td id="forename"><?= $person['forename_1'] ?></td> 
      <td id="surname"><?= $person['surname_1'] ?></td> 
      <td><button type="submit" >More Info</button></td> 
     </tr> 
<?php endforeach; ?> 
    </table> 
    </form> 
</html> 

Così ora ciò che accade è che la linea finale 'status' che ritornava un errore è ormai solo una riga vuota. Anche se questa non è una soluzione perfetta, non mi dispiace occuparmi di una riga vuota della tabella quando visualizzo la pagina come HTML.

+0

Puoi ignorarlo con questa istruzione if: "if (isset ($ person [' forename_1 ']) && isset ($ person [' cognome_1 ']))" quindi visualizza la riga, altrimenti non fare nulla –

+0

L'ho provato - non ha funzionato ... forse stavo mettendo il codice nel posto sbagliato .. sto imparando qui;) – BLev80

+0

Ho modificato il mio post precedente ... Vedi se questo ti aiuta ... –

Problemi correlati