怎样使用php获取复杂json数据并输出

阿凡行舟 2015-03-08 11:38:11
这是调用多客服查看当前在线客服时的微信api

返回数据示例(正确时的JSON返回结果):
{
"kf_online_list": [
{
"kf_account": "test1@test",
"status": 1,
"kf_id": "1001",
"auto_accept": 0,
"accepted_case": 1
},
{
"kf_account": "test2@test",
"status": 1,
"kf_id": "1002",
"auto_accept": 0,
"accepted_case": 2
}
]
}


以下是我的代码:

$url_online ="https://api.weixin.qq.com/cgi-bin/customservice/getonlinekflist?access_token={$access_token}";
$output_online=file_get_contents($url_online);
$jsonStr = json_decode($output_online,true);
//读取信息:
$content = "客服1:".$jsonStr["kf_online_list"]["kf_account"]."\n在线状态:".$jsonStr["kf_online_list"]["status"]."\n正在接待人数:".$jsonStr["kf_online_list"]["accepted_case"]."\n\n客服2:".$jsonStr["kf_online_list"]["kf_account"]."\n在线状态:".$jsonStr["kf_online_list"]["status"]."\n正在接待人数:".$jsonStr["kf_online_list"]["accepted_case"];
?>


我本是希望获得所有的kf_account数据,并返回到微信回话界面,可是这结构有点复杂,还有相同的字段。。。
目前还查询不到结果,我估计是最后获取json的数组写的不对,希望大家帮忙!
...全文
405 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-03-09
  • 打赏
  • 举报
回复
$s =<<< JSON
{
    "kf_online_list": [
        {
            "kf_account": "test1@test",
            "status": 1,
            "kf_id": "1001",
            "auto_accept": 0,
            "accepted_case": 1
        },
        {
            "kf_account": "test2@test",
            "status": 1,
            "kf_id": "1002",
            "auto_accept": 0,
            "accepted_case": 2
        }
    ]
}
JSON;
$jsonStr = json_decode($s, true);

$content = '';
foreach($jsonStr['kf_online_list'] as $i=>$item) {
  $n = $i + 1;
  $content .= "
客服{$n}:$item[kf_account]
在线状态:$item[status]
正在接待人数:$item[accepted_case]
";
}
echo $content;

客服1:test1@test
在线状态:1
正在接待人数:1

客服2:test2@test
在线状态:1
正在接待人数:2

阿凡行舟 2015-03-09
  • 打赏
  • 举报
回复
干脆用for循环得了。。
阿凡行舟 2015-03-09
  • 打赏
  • 举报
回复
$status=array('0'=>'不在线','1'=>'电脑在线','2'=>'手机在线','3'=>'电脑手机在线');
//$onlinestatus=$jsonStr["kf_online_list"][0]["status"];
foreach ($jsonStr['kf_online_list'] as $list)
{
	foreach ($list[kf_account] as $account)
	{
		foreach ($list[status] as $onlinestatus)
		{
			$statusStr0=$status[$onlinestatus];
			foreach ($list[accepted_case] as $jiedai)
			{
				$content.="客服:".$account."\n在线状态:"."$statusStr0"."\n正在接待人数:"."$jiedai"."\n\n";
			}
		}
	}
}
这是我又写的代码,在foreach ($list[kf_account] as $account)这一行出错了 错误:Invalid argument supplied for foreach() ,这又怎么改呢亲们?
xuzuning 2015-03-09
  • 打赏
  • 举报
回复
二维数组当做一维访问,当然就不行啦
傲雪星枫 2015-03-09
  • 打赏
  • 举报
回复
print_r($data); 看看decode後的數組結構,就不容易錯了。
阿凡行舟 2015-03-09
  • 打赏
  • 举报
回复
额知道为啥了,在$
jsonStr["kf_online_list"]["kf_account"]
那两个【】【】中间加上[0]=>
jsonStr["kf_online_list"][0]["kf_account"]
就行了,搜了一晚上啊。。
智商众筹 2015-03-09
  • 打赏
  • 举报
回复
file_get_contents对https使用貌似有个警告,你需要打开display errors才能看到 这种问题一步步var_dump上一个变量就可以确定位置了
阿凡行舟 2015-03-08
  • 打赏
  • 举报
回复
我顶

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧