PHP解析JSON时Ticket字段不显示但Measures正常的问题求助
问题根因
字段访问路径写错了。你的JSON结构里,TicketNo、Creation、FailureDescription 三个字段都嵌套在$myItem的子对象Ticket下,不是$myItem的直接属性:
- 原代码写
$myItem->TicketNo,是在顶层对象上找不存在的属性,自然返回空值 - 你之前尝试写
$myItem->Ticket但没有继续访问它下面的子字段,当然拿不到具体值 Measures部分能正常显示,是因为它本身就是$myItem的直接同级属性,访问路径写对了
这个问题和Ticket字段是不是数组没有任何关系。
修复方案
补全Ticket相关字段的访问层级即可,两种常用写法都可以:
对象模式(默认json_decode返回对象)
$file = file_get_contents($remote_url, false, $context); $myData = json_decode($file); foreach($myData as $myItem) { // 先取Ticket子对象,再访问下属字段 $ticket = $myItem->Ticket; echo "<tr><td>{$ticket->TicketNo}</td><td>CLOSED</td><td>{$ticket->Creation}</td><td>{$ticket->FailureDescription}</td></tr>"; echo "<tr><th>Start</th><th>Measure</th></tr>"; foreach ($myItem->Measures as $wm) { echo "<tr><td>{$wm->StartTime}</td><td>{$wm->Description}</td></tr>"; } }
提示:双引号中解析对象属性时,建议用
{}把变量包裹起来,避免PHP解析规则导致的异常。
关联数组模式(json_decode第二参数传true)
如果习惯数组访问语法,确保层级路径正确即可:
$file = file_get_contents($remote_url, false, $context); // 第二参数传true,将JSON解析为关联数组 $myData = json_decode($file, true); foreach($myData as $myItem) { // 数组层级:先取$myItem['Ticket']子数组,再取下属字段 $ticket = $myItem['Ticket']; echo "<tr><td>{$ticket['TicketNo']}</td><td>CLOSED</td><td>{$ticket['Creation']}</td><td>{$ticket['FailureDescription']}</td></tr>"; echo "<tr><th>Start</th><th>Measure</th></tr>"; foreach ($myItem['Measures'] as $wm) { echo "<tr><td>{$wm['StartTime']}</td><td>{$wm['Description']}</td></tr>"; } }
排查技巧
既然var_dump($myData)能看到全量数据,后续遇到这类属性访问为空的问题,可以直接在循环内打印单条$myItem的结构,对照输出的嵌套关系写访问路径,能快速定位层级错误。
内容的提问来源于stack exchange,提问作者culter
相关产品推荐
相关产品推荐

