Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Json e Php

  1. #1
    Utente di HTML.it L'avatar di gnola
    Registrato dal
    Jun 2001
    Messaggi
    603

    Json e Php

    Ciao a tutti sto impazzendo con la lettura di un file json.
    Premesso che è la prima volta che utilizzo questo formato di dati e con un file strutturato in modo semplice non ho avuto problemi....ora però mi serve un file json abbastanza complesso con dati annidati che dovrei poi leggere con un ciclo in php....ma il punto è che non so come fare!!
    Chi sa aiutarmi?

    il file json è questo:

    codice:
    {
    "file":[
       {
            "gruppo": [
               {
                "ospite1": 
                    {
                        "nome": "Mario",
                        "cognome": "Rossi" 
                    }
                 ,
                "ospite2": 
                    {
                        "nome": "Paolo",
                        "cognome": "Verdi" 
                    }
                ,    
                "ospite3":
                    {
                        "nome": "Paolo",
                        "cognome": "Verdi" 
                    }
                
                 
              }
              ],
              
            "gruppo": [
               {
                "ospite1": 
                    {
                        "nome": "Mario",
                        "cognome": "Rossi" 
                    }
                 ,
                "ospite2": 
                    {
                        "nome": "Paolo",
                        "cognome": "Verdi" 
                    }
                ,    
                "ospite3":
                    {
                        "nome": "Paolo",
                        "cognome": "Verdi" 
                    }
                
                  
              }
           ]
        
     }
    ]
    }
    -----------------------

    il file php che legge i dati però non riesco a completarlo....

    Codice PHP:
    $string=file_get_contents('datijson2.json''r'); 
    $json_o=(array) json_decode($string,true);

    foreach(
    $json_o['file'] as $p){





  2. #2
    Utente di HTML.it L'avatar di gnola
    Registrato dal
    Jun 2001
    Messaggi
    603
    il file json l'ho corretto che era scritto male:

    codice:
    {
    "file":[
       {
    		"gruppo": [
    		   {
    			"ospite":[ 
    				{
    					"nome": "Mario",
    					"cognome": "Rossi" 
    				}
    			 ],
    			"ospite":[ 
    				{
    					"nome": "Paolo",
    					"cognome": "Verdi" 
    				}
    			],	
    			"ospite":[
    				{
    					"nome": "Paolo",
    					"cognome": "Verdi" 
    				}
    			]
    		     
    		  }
    		  ],
    		  
    		"gruppo": [
    		   {
    			"ospite": [
    				{
    					"nome": "Mario",
    					"cognome": "Rossi" 
    				}
    			 ],
    			"ospite": [
    				{
    					"nome": "Paolo",
    					"cognome": "Verdi" 
    				}
    			],	
    			"ospite":[
    				{
    					"nome": "Paolo",
    					"cognome": "Verdi" 
    				}
    			]
    		      
    		  }
    	   ]
    	
     }
    ]
    }

  3. #3
    guarda che la struttura del json è "sbagliata" (anche se puoi continuare sempre a leggerlo eh), nel senso che dentro "file" ci dovrebbe essere un array di "gruppo", che a sua volta contiene un array di "ospite"... nel tuo caso hai "file" che contiene un array dove ogni elemento è una mappa chiave => valore con chiave "gruppo" e valore una mappa con chiave ospite e un array di ... oddio mamma ma che struttura eh? oO oO riguardo al tuo codice, se fai print_r($json_o) prima del ciclo vedi che struttura ha tirato fuori da quella cosa, cmq una struttura più lineare era:

    codice:
    {
    "file":[
       {
            "gruppo": 
               {
                "ospite":[ 
                    {
                        "nome": "Mario",
                        "cognome": "Rossi" 
                    },
                    {
                        "nome": "Paolo",
                        "cognome": "Verdi" 
                    },
                    {
                        "nome": "Paolo",
                        "cognome": "Verdi" 
                    }
                ]
              }
        },
        {    
        "gruppo": 
           {
            "ospite":[ 
                {
                    "nome": "Mario",
                    "cognome": "Rossi" 
                },
                {
                    "nome": "Paolo",
                    "cognome": "Verdi" 
                },
                {
                    "nome": "Paolo",
                    "cognome": "Verdi" 
                }
            ]
          }
        }
      ]
    }
    che ancora meglio, se non ti serve "gruppo" come chiave, verrebbe:

    codice:
    {
    "file":[
       {
          "ospite":[ 
              {
                  "nome": "Mario",
                  "cognome": "Rossi" 
              },
              {
                  "nome": "Paolo",
                  "cognome": "Verdi" 
              },
              {
                  "nome": "Paolo",
                  "cognome": "Verdi" 
              }
          ]
        },
        {
           "ospite":[ 
               {
                   "nome": "Mario",
                   "cognome": "Rossi" 
               },
               {
                   "nome": "Paolo",
                   "cognome": "Verdi" 
               },
               {
                   "nome": "Paolo",
                   "cognome": "Verdi" 
               }
           ]
         },
      ]
    }
    che in questo caso iteresti così:

    Codice PHP:

    foreach($json_o['file'] as $group)
    {
       foreach(
    $group['ospite'] as $ospite)
       {
           echo 
    "nome ".$ospite['nome'].' - cognome '.$ospite['cognome']."\n";
       }

    o qualcosa di simile
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,469
    Intanto una cosa, se come indice degli array metti per tutti "gruppo" è come se in realtà ne mettessi solo uno, l'ultimo, perché come gli indici di un array PHP, non possono essercene 2 uguali, sopravvive solo l'ultimo dichiarato, gli altri vengono a turno sostituiti da quello che segue-
    Quindi direi che andrebbe fatto così
    Codice PHP:
    $json '{
    "file":[
       {
            "gruppo1": [
               {
                "ospite1": 
                    {
                        "nome": "Mario",
                        "cognome": "Rossi" 
                    }
                 ,
                "ospite2": 
                    {
                        "nome": "Paolo",
                        "cognome": "Verdi" 
                    }
                ,    
                "ospite3":
                    {
                        "nome": "Paolo",
                        "cognome": "Verdi" 
                    }
              }
              ],
              
            "gruppo2": [
               {
                "ospite1": 
                    {
                        "nome": "Mario",
                        "cognome": "Rossi" 
                    }
                 ,
                "ospite2": 
                    {
                        "nome": "Paolo",
                        "cognome": "Verdi" 
                    }
                ,    
                "ospite3":
                    {
                        "nome": "Paolo",
                        "cognome": "Verdi" 
                    }
              }
           ]
     }
    ]
    }'
    ;

    $json_o json_decode($json,true);

    foreach( 
    $json_o['file'] as $gruppi )
    {
        foreach( 
    $gruppi as $gruppo )
        {
            foreach( 
    $gruppo as $ospiti )
            {
                foreach(
    $ospiti as $ospite)
                {
                    echo 
    $ospite['nome'] . ' ' $ospite['cognome'] . '<br>';
                }
            }
        }


  5. #5
    Utente di HTML.it L'avatar di gnola
    Registrato dal
    Jun 2001
    Messaggi
    603
    Grazie mille per le risposte..ora dovrei però fare una cosa ancora più complessa perchè dovrei inserire un ulteriore array che contiene gruppo1, gruppo2 ecc e che può essere anch'esso ripetuto....poi dovrei anche sapere il nome delle chiavi e non solo i dati che ci sono dentro..quindi deve apparire:
    "struttura1"-->
    gruppo1-->ospite1(guido)ospite2(paolo),
    gruppo2-->ospite1(maria)

    "struttura2"-->
    gruppo1-->ospite1(tizio)ospite2(caio),
    gruppo2-->ospite1(pippo)ospite2(pluto)

    ecc ecc

    -----------------------------------

    il file json è questo ma non riesco ad aggiungere l'ulteriore livello così come nel ciclo for...ho provato ma mi va in errore

    codice:
    {
    "file":[
       {
               
            "gruppo1": [
               {
                "ospite1": 
                    {
                    "nome": "Camerlingo",
                    "cognome": "Guido"
                    }
                 ,
                "ospite2": 
                    {
                    "nome": "Paolo",
                    "cognome": "Verdi"
                    }
              }
              ],
              
            "gruppo2": [
               {
                "ospite1": 
                    {
                    "nome": "Maria",
                    "cognome": "Rossi"
                    }
              }
           ],
              
            "gruppo3": [
               {
                "ospite1": 
                    {
                    "nome": "Francesca",
                    "cognome": "Sisti"
                    }
                    ,
                "ospite2": 
                    {
                    "nome": "Giuseppe",
                    "cognome": "Ruggio"
                    }
              }
           ]
            
           
     }
    ]
    }

    Ho modificato il ciclo for mettendo gli echo per le chiavi degli array:

    codice:
    $json_o = json_decode($content,true);
    
    
    foreach( $json_o['file'] as $appartamento )
    
    
    {
        foreach( $appartamento as $gruppo )
        {
                echo key($appartamento);
                next($appartamento);
            foreach( $gruppo as $ospiti )
            {
                echo "---<br>";
                foreach($ospiti as $ospite)
                {
                echo key($ospiti);
                next($ospiti);
                    echo $ospite['nome'] . ' ' . $ospite['cognome'] . '<br>';
                }
            }
        }
        
    }
    Ultima modifica di gnola; 15-12-2016 a 00:34

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,469
    Le chiavi le puoi prendere direttamente col foreach

    Codice PHP:
    foreach($ospiti as $key => $ospite)
    {
        echo 
    $key ' - ' $ospite['nome'] . ' ' $ospite['cognome'] . '<br>';


  7. #7
    Utente di HTML.it L'avatar di gnola
    Registrato dal
    Jun 2001
    Messaggi
    603
    Grazie!!! ora sono riuscita!

    ciaooo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.