如何从存储在变量中的 jsondecode() 响应中搜索和获取值? [复制]
Posted
技术标签:
【中文标题】如何从存储在变量中的 jsondecode() 响应中搜索和获取值? [复制]【英文标题】:How to search and get values from jsondecode() response stored in a variable? [duplicate] 【发布时间】:2020-10-28 03:43:12 【问题描述】:我在 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”值搜索到该响应中并返回相应的“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?
...
感谢您的帮助!
【问题讨论】:
确保您的帖子中始终包含语言标签 (PHP),以确保它们被最大数量的其他用户看到。 确保您始终包含编码尝试和/或研究/辛勤证明,这将向志愿者保证您不仅仅是“倾销您的要求”。我们不希望您依赖这里的志愿者“为您工作”。帮助吸血鬼是一件坏事。如果您知道如何访问嵌套数组,请在您的 sn-p.xml 中进行演示。如果您知道如何拨打in_array()
,请显示。 @Mag
【参考方案1】:
很遗憾,您返回的 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
【讨论】:
以上是关于如何从存储在变量中的 jsondecode() 响应中搜索和获取值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何从另一个 bigquery 响应将值插入 mysql 表
Flutter:尝试使用 jsonDecode - 错误:字符串不是索引错误的 int 类型的子类型