PHP检查item=value的JSON字符串
我需要在json字符串中获取一个特定值 json字符串来自api urlPHP检查item=value的JSON字符串,php,arrays,json,Php,Arrays,Json,我需要在json字符串中获取一个特定值 json字符串来自api urlhttp://url:port/api.php?action=reg_user&sub=list和类似的输出 [{"id":"1","username":"username1","credits":"0","group_id":"1","group_name":"Administrators","last_login":"1511883014","date_registered":"1421604973","email":"
http://url:port/api.php?action=reg_user&sub=list
和类似的输出
[{"id":"1","username":"username1","credits":"0","group_id":"1","group_name":"Administrators","last_login":"1511883014","date_registered":"1421604973","email":"test1@my-email.com","ip":"8.8.8.8","status":"1"},{"id":"31","username":"username2","credits":"0","group_id":"1","group_name":"Administrators","last_login":"1539813642","date_registered":"1473632400","email":"test2@my-email.com","ip":"8.8.8.8","status":"1"},
我想检查username=username1的信用值
如果积分>30,则执行x,否则执行y
我想首先我需要解码这个jason字符串
所以我试着去做
$api_result = file_get_contents( 'http://url:port/api.php?action=reg_user&sub=list' );
$json_decode = json_decode($api_result);
echo $json_decode;
希望它能以一种格式良好的结构响应数组,相反,它只输出单词array
。我该怎么办
谢谢
更新1…
因此,我再次检查,我可以回显$api_结果,这样我就知道文件_get_contents
工作正常,我尝试了两个注释建议,但都不起作用
其中一个建议是让我的php
$api\u结果=文件\u获取\u内容(“”);
$json_decode=json_decode($api_结果);
echo$json_decode['username']
下面是一个屏幕截图,显示在不是propper json字符串的情况下,echo$api_结果的格式
所以对我来说,这看起来像是用打开的(并且都包含在一对[]中,然后每个结果都包含在{}中,就像我期望的json字符串一样,对吗?但是我认为json字符串使用{},数组使用{},所以对我来说,这看起来像数组中的字符串
我查看并尝试了var\u dump(json\u decode($json));
,它确实打印了这封信
更新2
我只是试着把数据粘贴进去,它能够很好地解码数据
然后,如果底部的json_decode示例也不起作用,它会给我一个副本,返回一个空值,比如json_decode在我的服务器上不起作用?来自第二个屏幕截图(请剪切并粘贴文本!)您可以看到解码后的JSON是一个具有属性
id
,username
等的对象数组。因此,您可以使用对象表示法访问它们。此代码使用原始问题的api_结果片段来演示如何执行所需操作:
$api_result = '[{"id":"1","username":"username1","credits":"0","group_id":"1","group_name":"Administrators","last_login":"1511883014","date_registered":"1421604973","email":"test1@my-email.com","ip":"8.8.8.8","status":"1"},{"id":"31","username":"username2","credits":"0","group_id":"1","group_name":"Administrators","last_login":"1539813642","date_registered":"1473632400","email":"test2@my-email.com","ip":"8.8.8.8","status":"1"}]';
$json = json_decode($api_result);
foreach ($json as $user) {
if ($user->username == 'username1') {
if ($user->credits > 30) {
// do x
echo "user $user->username has more than 30 credits ($user->credits)";
}
else {
// do y
echo "user $user->username has less than or equal to 30 credits ($user->credits)";
}
}
}
输出:
user username1 has less than or equal to 30 credits (0)
如果它确实是一个数组,您需要做的是像访问数组一样访问它。例如,
echo$json_decode['username']
。如果您想一次看到整个数组,请为它创建一个循环,或者使用var_dump
使用print_r(json_decode($api_result))转储变量;
打印一个结构。在解码后的结构上运行一个循环,并检查$arr[i]['credits']>30
。感谢您的评论@Wreigh,可能是重复的,但不幸的是,这没有回音。返回一个空白屏幕更新您的问题,包括您尝试过的内容,以便我们可以进一步帮助您:)在我尝试制作$api\u result=my original file\u get\u contents之前,这一切都是完美的。那么,我的file\u get\u contents是否存在问题???这可能是字符编码问题吗?返回完全空白屏幕。。。大概这是因为它无法解码api返回的信息…抱歉@Nick,我在输入api URL时犯了错误。。。现在一切都好了,这太完美了,谢谢!!!太好了。很高兴我能帮忙。