我一直在寻找 interwebz 以获得一个简单的答案但却无法找到。所以,问题是:
我要解码一些JSON以查看是否存在值;但是,我不认为我做得对。我想检查appid:730的值是否存在。
这是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
},
]
}
}
这就是我想要的:
$json = file_get_contents('JSON URL HERE');
$msgArray = json_decode($json, true);
if (appid: 730 exists) {
...
}
谢谢,希望我解释得足够多。
答案 0 :(得分:2)
首先,你有无效的json。请参阅下面的字符串减速中的注释(这可能是您问题中的拼写错误)。
$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
}
}
我们只是在游戏阵列中循环并检查其appid
。然后我们只是做一些事情,然后打破循环以防止开销。
答案 1 :(得分:0)
json_decode()
实际上将返回已解码的JSON。 JSON是一个字符串,解码的JSON是一个对象数组。
您将需要遍历该对象数组以检查每个对象。
$msgArray = json_decode($json);
foreach($msgArray->response->games as $game) {
if($game->appid == 730) {
// it exists
}
}
答案 2 :(得分:0)
试试这个
$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
}
}
答案 3 :(得分:0)
我发现这个解决方案很直接:
$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";
非常方便在访问其数据之前解析和验证来自其他Web服务的结果,因此我们避免和开发时间。
我希望这就是你要找的东西。