Analizzare Dati JSON con PHP

Ho analizzato i dati JSON numerose volte, ma per qualche motivo non riesce a trovare la sintassi corretta da utilizzare quando i dati sono nidificati. Sto cercando di analizzare le “attività” da questo JSON, ma continuare ad ottenere una invalid argument supplied foreach (), a prescindere di ciò che cerco.

   "3435":{
      "name":"COLO-1014-SJ1",
      "nickname":"US-SJC-004",
      "type":"Colocated Server",
      "location":"San Jose:55 S Market",
      "assets":{
         "CPU":[
            {
               "model":"Intel E3 1270"
            }
         ],
         "Hard Drives":[
            {
               "model":"Western Digital 500GB RE4 ABYX SATA"
            },
            {
               "model":"Western Digital 500GB RE4 ABYX SATA"
            },
            {
               "model":"Kingston 240GB SSD"
            }
         ],
         "RAM":[
            {
               "model":"Super Talent 4GB DDR3 1333 ECC"
            },
            {
               "model":"Super Talent 4GB DDR3 1333 ECC"
            },
            {
               "model":"Super Talent 4GB DDR3 1333 ECC"
            },
            {
               "model":"Super Talent 4GB DDR3 1333 ECC"
            }
         ],

Mi sarei aspettato che fosse qualcosa lungo le linee di…

$json = json_decode($jsondata, true);

foreach ($json as $item)
{
    foreach ($item['assets']->RAM as $asset)
    {
        echo $asset->model;
    }
  • 2 ° json_decode arg è per assoc array, ma tu che utilizza un mix tra array e oggetti nel ciclo. Con vero come il 2 ° arg, si prega di utilizzare $item[‘attività’][‘RAM’] o utilizzare un oggetto come tanti sotto la risposta con falsa come il 2 ° arg
  • A parte questo, ti ringrazio tanto. Ho provato tutte le soluzioni qui sotto e nessuno ha funzionato fino a quando ho notato questo. Se vuoi rispondere, accetto la risposta
InformationsquelleAutor | 2013-11-04

 

4 Replies
  1. 4

    Sembra che hai dimenticato di aggiungere circostante parentesi graffe attorno dati JSON. Se i tuoi dati in formato JSON non è valido quindi il json_decode() la funzione non funzionerà correttamente.

    Ho risolto il tuo codice JSON qui sotto e questo ora valida e soddisfa gli standard JSON.

    {
        "3435": {
            "name": "COLO-1014-SJ1",
            "nickname": "US-SJC-004",
            "type": "Colocated Server",
            "location": "San Jose:55 S Market",
            "assets": {
                "CPU": [
                    {
                        "model": "Intel E3 1270"
                    }
                ],
                "Hard Drives": [
                    {
                        "model": "Western Digital 500GB RE4 ABYX SATA"
                    },
                    {
                        "model": "Western Digital 500GB RE4 ABYX SATA"
                    },
                    {
                        "model": "Kingston 240GB SSD"
                    }
                ],
                "RAM": [
                    {
                        "model": "Super Talent 4GB DDR3 1333 ECC"
                    },
                    {
                        "model": "Super Talent 4GB DDR3 1333 ECC"
                    },
                    {
                        "model": "Super Talent 4GB DDR3 1333 ECC"
                    },
                    {
                        "model": "Super Talent 4GB DDR3 1333 ECC"
                    }
                ]
            }
        }
    }

    Se mai bisogno di controllare il codice JSON è possibile utilizzare un validatore come http://jsonlint.com/

    In secondo luogo, che il codice PHP è sbagliato:

    $json = json_decode($jsondata, true);
    
    foreach ($json as $item)
    {
        foreach ($item->assets->RAM as $asset)
        {
            echo $asset->model;
        }
    }

    Si sono state cercando di accesso l’oggetto restituito un array che causa problemi con il ciclo foreach.

    • Il mio JSON valido in quel link, ma che è stata colpa mia, solo per la pubblicazione di un piccolo frammento di esso. Ho incollato il tuo codice PHP esattamente se e continua a spam Invalid argument supplied for foreach() per ogni ciclo.
    • In realtà non tutti gli elementi in mio JSON sono un “patrimonio” di matrice. Credo che questo potrebbe essere il problema. C’è un modo per verificare se esiste prima di fare un ciclo foreach su di esso?
    • Si può provare qualcosa di simile if(!empty($item->beni)){ // aggiungi il codice }
  2. 2

    $item->assets, non $item['assets']. Fare un print_r($json) modo è possibile vedere i tipi di varie parti del JSON – li farà più facile capire come accedervi.

Lascia un commento