【问题标题】:How to output Veezi JSON subarray?如何输出 Veezi JSON 子数组?
【发布时间】:2017-07-09 21:52:26
【问题描述】:

我正在使用 Veezi API,这是他们的一些 JSON 输出:

[{
    "Id":"ST00000032",
    "Title":"Avatar",
    "People":[
         {
             "Id":"0000000032",
             "FirstName":"Sam",
             "LastName":"Worthington",
             "Role":"Actor"
         },
         {
             "Id":"HO00000176",
             "FirstName":"James",
             "LastName":"Cameron",
             "Role":"Director"
         },
         {
             "Id":"HO00000578",
             "FirstName":"Sigourney",
             "LastName":"Weaver",
             "Role":"Actor"
        }
    ],
    "AudioLanguage":"English"
}]

到目前为止,我正在 PHP 中构建一个字符串($theArray 是我的 JSON 解码数组,这是我拥有的代码:

$allShows .= '<p class="details">With: ';
foreach($theArray['People'] as $key => $value){
    $allShows .= $value->FirstName.' '.$value->LastName.' ('.$value->Role.') <br>';
}
$allShows .= '</p>';

我没有得到任何值,只有“角色”周围的嵌入式括号。正确数量的括号被返回,所以我很确定我循环正确。谁能发现我的问题?

【问题讨论】:

  • whats print_r($theArray) 看起来像,看起来你有一个对象数组,所以 json_decode 会给你一个数组数组,你需要两个 foreach 或者你只想要第一个 foreach($theArray[0]['People'] as ...)
  • 如果您已将 JSON 字符串解码为数组而不是对象,则所有嵌套的 JSON 对象也将是数组。在这种情况下,您应该使用$value['FirstName'] 而不是$value-&gt;FirstName

标签: php arrays json foreach elements


【解决方案1】:

您可以将整个 json 字符串作为数组处理。如果您取消注释我的 var_export() 调用,您可以看到数组以零索引元素开始。

代码:(Demo)

$json='[
{
    "Id":"ST00000032",
    "Title":"Avatar",
    "People":[
         {
             "Id":"0000000032",
             "FirstName":"Sam",
             "LastName":"Worthington",
             "Role":"Actor"
         },
         {
             "Id":"HO00000176",
             "FirstName":"James",
             "LastName":"Cameron",
             "Role":"Director"
         },
         {
             "Id":"HO00000578",
             "FirstName":"Sigourney",
             "LastName":"Weaver",
             "Role":"Actor"
        }
    ],
    "AudioLanguage":"English"    }
]';

//var_export(json_decode($json,true));

$allShows='<p class="details">With: ';
foreach(json_decode($json,true)[0]['People'] as $value){
    $allShows.="{$value['FirstName']} {$value['LastName']} ({$value['Role']})<br>";
}
$allShows.='</p>';
echo $allShows;

输出:

<p class="details">With: Sam Worthington (Actor)<br>James Cameron (Director)<br>Sigourney Weaver (Actor)<br></p>

或者,如果你想使用对象数组,你可以使用这个:

$allShows='<p class="details">With: ';
foreach(json_decode($json)[0]->People as $value){
    $allShows.="{$value->FirstName} {$value->LastName} ({$value->Role})<br>";
}
$allShows.='</p>';
echo $allShows;  // same result

如果是我的项目,我不希望在&lt;/p&gt; 之前使用最后一个&lt;br&gt; 标签,所以我会使用这样的东西:

foreach(json_decode($json)[0]->People as $value){
    $set[]="{$value->FirstName} {$value->LastName} ({$value->Role})";
}
echo '<p class="details">With: ',implode('<br>',$set),'</p>';

输出:

<p class="details">With: Sam Worthington (Actor)<br>James Cameron (Director)<br>Sigourney Weaver (Actor)</p>

【讨论】:

    猜你喜欢
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    相关资源
    最近更新 更多