如何从存储在变量中的 jsondecode() 响应中搜索和获取值?

How to search and get values from jsondecode() response stored in a variable?

我在 https:///mysite/info 中有以下 JSON 响应:

{
 "wg0": {
   "privateKey": "[hidden]",
   "publicKey": "XXXXXXXXXXXXXXXXXXX",
   "listenPort": 0,
   "peers": {
     "B3GtLuabWguXoG2Tz8KVukPXx3twn7A+X/SVT8=": {
       "endpoint": "0.0.0.0:5377",
       "latestHandshake": "Oct 28, 2020 1:58:32 UTC",
       "transferRx": "2.432 GB",
       "transferTx": "1.098 GB",
       "allowedIps": [
         "10.85.85.2/32"
       ]
     },
     "2Uqo3X2ubogU92LS4mWsZtF04ah3qJ4gt1g0=": {
       "endpoint": "0.0.0.0:5412",
       "latestHandshake": "Oct 28, 2020 1:58:52 UTC",
       "transferRx": "32.239 MB",
       "transferTx": "220.852 MB",
       "allowedIps": [
         "10.85.85.3/32"
       ]
     }
   }
 }
}

我需要在 PHP 中搜索该响应中的“allowedIps”值和 return 对应的“latestHandshake”值。

例如:

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_URL, 'https://mysite/info');
$result2 = curl_exec($ch2);
curl_close($ch2);

$obj2 = json_decode($result2);

$IPtoSearch = "10.85.85.2/32";

//Now How can I search $IPtoSearch into $obj2 and return latestHandshake value?

...

感谢帮助!

很遗憾,您返回的 JSON 实际上无效,因为 00000 不是有效整数。如果您可以将 00000 转换为 0,您的 JSON 将成功解码,您可以找到与您的搜索 IP 地址对应的 latestHandshake 值,如下所示:

$obj2 = json_decode($result2, true);
$IPtoSearch = "10.85.85.2/32";

foreach ($obj2['wg0']['peers'] as $peer) {
    if (in_array($IPtoSearch, $peer['allowedIps'])) {
        $latestHandshake = $peer['latestHandshake'];
        break;
    }
}

echo "Last handshake for $IPtoSearch was at $latestHandshake\n";

输出(对于您的示例数据):

Last handshake for 10.85.85.2/32 was at Oct 28, 2020 1:58:32 UTC

Demo on 3v4l.org