2016-04-25 15 views
5

Ho cercato dappertutto il interwebz per una risposta semplice ma non ne trovo nessuno. Quindi, la domanda è:PHP Json vedere se esiste il valore

Ho intenzione di decodificare alcuni JSON per vedere se esiste un valore; comunque, non penso di averlo fatto bene. Voglio verificare se il valore di appid: 730 esiste.

Ecco il JSON:

{ 
response: { 
    game_count: 106, 
     games: [ 
      { 
      appid: 10, 
      playtime_forever: 67 
      }, 
      { 
      appid: 730, 
      playtime_forever: 0 
      }, 
      { 
      appid: 368900, 
      playtime_forever: 0 
      }, 
      { 
      appid: 370190, 
      playtime_forever: 0 
      }, 
     ] 
    } 
} 

Questo è quello che voglio:

$json = file_get_contents('JSON URL HERE'); 
$msgArray = json_decode($json, true); 

if (appid: 730 exists) { 
    ... 
} 

Grazie, spero ho spiegato abbastanza.

+0

1. Usa '$ msgArray' in un foreach, e guarda nell'albero per la matrice' games'. –

+0

il 'json' non risponde ... [Json non valido] (https://3v4l.org/ld9Oa) –

risposta

2

In primo luogo, si dispone di JSON valido. Vedere il commento nella decelerazione della stringa di seguito (questo potrebbe essere un errore di battitura nella tua domanda).

$json = '{ 
"response": { 
    "game_count": 106, 
    "games": [ 
     { 
      "appid": 10, 
      "playtime_forever": 67 
     }, 
     { 
      "appid": 730, 
      "playtime_forever": 0 
     }, 
     { 
      "appid": 368900, 
      "playtime_forever": 0 
     }, 
     { 
      "appid": 370190, 
      "playtime_forever": 0 
     } // <------ note the lack of `,` 
     ] 
    } 
}'; 

$arr = json_decode($json, true); 

foreach($arr['response']['games'] as $game) { 
    if($game['appid'] === 730) { // I would strictly check (type) incase of 0 
     echo "exists"; // or do something else 
     break; // break out if you dont care about the rest 
    } 
} 

example

stiamo solo scorrendo la matrice giochi e controllando la sua appid. Quindi facciamo solo qualcosa e poi interrompiamo il ciclo per evitare un sovraccarico.

0
json_decode() 

restituisce effettivamente il JSON decodificato. JSON è una stringa, decodificata JSON è una matrice di oggetti.

Sarà necessario scorrere su quella matrice di oggetti per ispezionarli.

$msgArray = json_decode($json); 

foreach($msgArray->response->games as $game) { 
    if($game->appid == 730) { 
     // it exists 
    } 
} 
+1

sta usando il flag true per il secondo parametro, rendendolo una matrice di dati rispetto a un oggetto di dati . –

+0

ok ... non penso che sia il suo problema. Sto solo cercando di indirizzarlo verso la visualizzazione di ogni entità di dati nella struttura dati che risulta dalla decodifica del json. – jcorry

+1

Beh, non voglio che si confonda con i diversi tipi se gli è stato detto da qualcun altro di usare gli Array. –

0

provare questo

$json = file_get_contents('JSON URL HERE'); 
$msgArray = json_decode($json, true); 

foreach($msgArray['response']['games'] as $key => $value){ 
    if ($value['appid'] == 730) { 
    //do something 
    }else{ 
    // do else 
    } 
} 
+0

'$ value.appid' non è corretto, e più per JS che PHP. Corretto sarebbe '$ valore ['appid']' –

+0

sì, sono stato fatto errore, grazie :-) –

0

Trovo questa soluzione abbastanza semplice:

$r='{ 
"response": { 
    "game_count": 106, 
     "games": [ 
      { 
      "appid": 10, 
      "playtime_forever": 67 
      }, 
      { 
      "appid": 730, 
      "playtime_forever": 0 
      }, 
      { 
      "appid": 368900, 
      "playtime_forever": 0 
      }, 
      { 
      "appid": 370190, 
      "playtime_forever": 0 
      } 
     ] 
    } 
}'; 

function find($arr, $id) { 
    if(!empty($arr)) 
     foreach ($arr as $key => $value) { 
      if(isset($value->appid) && $value->appid == $id) 
       return true; 
     } 
    return false; 
} 

$obj = json_decode($r); 
if(isset($obj) && isset($obj->response)) { 
    if(isset($obj->response->games) && !empty($obj->response->games)) 
     $arr = $obj->response->games; 
    else 
     $arr = array(); 
} else { 
    echo "NOT valid found\n"; 
} 

$appid = 730; 

if(find($arr, $appid)) 
    echo "Appid $appid found\n"; 
else 
    echo "Appid $appid NOT found\n"; 

E 'molto comodo per analizzare e convalidare i risultati provenienti da altri servizi web prima di accedere i loro dati, in modo da evitare e tempi di sviluppo.

Spero che sia quello che stai cercando.

Problemi correlati