在PHP中访问JSON值(一部分工作,另一部分不工作)



我有这个JSON:

[
{
"Ticket": {
"TicketNo": 1920,
"Creation": "21.03.2016 05:45:00",
"FailureDescription": "Error 46",
},
"Measures": [
{
"StartTime": "2017-03-17T05:45:00",
"Description": "Long description",
}
]
},
{
"Ticket": {
"TicketNo": 1005,
...
下面是我用来显示数据的代码:
$file = file_get_contents($remote_url, false, $context);
$myData = json_decode($file);
foreach($myData as $myItem) {
echo "<tr><td>$myItem->TicketNo</td><td>CLOSED</td><td>$myItem->Creation</td><td>$myItem->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>";
}
}

问题是,'Ticket'部分根本没有显示,但'Measures'部分工作良好。我想这是因为'Ticket'后面缺少[],但我非常想让它工作。

JSON是有效的,var_dump($myData)返回所有的数据。我试图用'json_decode($file, true)'来解码JSON,以获得一个数组并使用$mydata['Ticket']['TicketNo'],但它也不起作用。我在第一个查询中尝试了"$myData->Ticket",但没有效果。我也阅读了SO中提供的所有类似问题,但我没有找到解决方案。谢谢你

这里有两个错误。

首先,您需要仔细读取JSON的结构,以查看要访问的内容。JSON有:

  • [数组,你循环与foreach($myData as $myItem) {
  • 数组中的每个项目都有两个键:"Ticket"one_answers";Measures";作为$myItem->Ticket$myItem->Measures
  • 访问
  • 每个"Ticket"有键"ticketno"、"creation"one_answers"failuredescription"。这些不是$myItem的键,它们是$myItem->Ticket的子键;换句话说,$myItem->Ticket->TicketNo$myItem->Ticket->Creation$myItem->Ticket->FailureDescription

第二个问题是,当您在双引号字符串(如"hello $myItem->Ticket->TicketNo world")中编写$myItem->Ticket->TicketNo时,PHP认为您希望变量$myItem->Ticket后跟文本"->TicketNo world"。为了解决这个问题,将变量部分放在花括号中:"hello {$myItem->Ticket->TicketNo} world".

所以echo行应该是:
echo "<tr><td>{$myItem->Ticket->TicketNo}</td><td>CLOSED</td><td>{$myItem->Ticket->Creation}</td><td>{$myItem->Ticket->FailureDescription}</td></tr>";

最新更新