PHP Json看看是否存在值

时间:2016-04-25 11:32:20

标签: php json

我一直在寻找 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) {
   ...
}

谢谢,希望我解释得足够多。

4 个答案:

答案 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
    }
}

example

我们只是在游戏阵列中循环并检查其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服务的结果,因此我们避免和开发时间。

我希望这就是你要找的东西。