使用php区分两个不同的JSON对象
我正在创建一个搜索引擎。在这个搜索引擎中,我们按演员的名字搜索电影。通过演员姓名搜索电影会返回两种不同类型的JSON数据。如果未找到参与者名称,则JSON将以以下格式返回(请参阅) 当找到参与者名称时,返回的JSON是多维的,格式如下(请参阅链接:) 我试过这个密码使用php区分两个不同的JSON对象,php,json,Php,Json,我正在创建一个搜索引擎。在这个搜索引擎中,我们按演员的名字搜索电影。通过演员姓名搜索电影会返回两种不同类型的JSON数据。如果未找到参与者名称,则JSON将以以下格式返回(请参阅) 当找到参与者名称时,返回的JSON是多维的,格式如下(请参阅链接:) 我试过这个密码 $output = json_decode($output); if($output['errorcode']==400)
$output = json_decode($output);
if($output['errorcode']==400)
{
foreach($output as $key =>$row)
{
echo "<p>$key : $row";
echo '<br>';
}
}
else
{
foreach($output as $value)
{
foreach($value as $key =>$row)
{
if($key == "mediatype" || $key == "runtime" || $key == "unit" || $key == "show_id" )
continue;
else if($key == "show_cast" )
{
echo"<br>Show Cast:";
$pieces = explode(",", $row);
foreach($pieces as $strings)
{
$link='http://localhost:8000/?Title=&director=&Actor='.$strings;
echo "<li><a href='$link'>$strings</a>";
}
echo "<br>";
}
else if($key == "director" )
{
if(empty($row))
echo"<br>Director:No details of director<br>";
else
{
echo"<br>Director:";
$link='http://localhost:8000/?Title=&director='.$row.'&Actor=';
echo "<a href='$link'>$row</a><br>";
}
}
else if($key !="poster")
{
echo "$key : $row";
echo '<br>';
}
else
{
echo '<img src="'.$row.'" />';
}
}
echo "<br><br><br><br><br><br>";
}
}
$output=json\u decode($output);
如果($output['errorcode']==400)
{
foreach($key=>$row输出)
{
echo“$key:$row”;
回声“
”;
}
}
其他的
{
foreach($输出为$值)
{
foreach($key=>$row的值)
{
如果($key==“mediatype”| |$key==“runtime”| |$key==“unit”| |$key==“show_id”)
继续;
否则,如果($key==“show_cast”)
{
回声“
显示演员阵容:”;
$pieces=分解(“,”,$row);
foreach($string形式的片段)
{
$link='1http://localhost:8000/?Title=&director=&Actor=“.$strings;
回声“”;
}
回声“
”;
}
否则,如果($key==“director”)
{
如果(空($行))
echo“
董事:没有董事的详细信息
”;
其他的
{
回声“
导演:”;
$link='1http://localhost:8000/?Title=&director=“.$row.”&Actor=”;
回声“
”;
}
}
否则,如果($key!=“海报”)
{
回显“$key:$row”;
回声“
”;
}
其他的
{
回声';
}
}
回声“
”;
}
}
使用它会给我“未定义索引:errorcode”的错误。基本上,我的问题是在if-else条件下使用什么来区分接收到的两个JSON对象
请帮忙!!提前感谢。尝试if(is_object($output)和&isset($output->errorcode))
所以它是这样的:
$output = json_decode($output);
if(is_object($output) && isset($output->errorcode))
{
foreach($output as $key =>$row)
{
echo "<p>$key : $row";
echo '<br>';
}
}
else
{
// the rest
}
$output=json\u decode($output);
if(is_对象($output)&&isset($output->errorcode))
{
foreach($key=>$row输出)
{
echo“$key:$row”;
回声“
”;
}
}
其他的
{
//其余的
}
发生的是,当没有匹配项时,json是一个对象,但当有匹配项时,它是一个对象数组
如果我们只使用If(isset($output->errorcode))
,那么,在存在匹配项的情况下,$output是一个数组而不是一个对象,并且上面尝试将其视为一个对象,这会导致关于将数组视为对象的警报
当第一个条件为false时,布尔值
&&
将“短路”,并且它永远不会计算第二个条件。因此,我们首先检查它是否是带有is\u object()
的对象。。如果不是,则它将永远不会检查是否有名为“errorcode”的成员,从而避开将数组视为对象的警告。使用if(isset($output['errorcode'])会出现以下错误“无法使用stdClass类型的对象作为数组”。您应该使用$output->errorcode,而不是使用$output['errorcode']),使用$output['errorcode'],当我搜索一个存在的参与者时,它给了我以下错误“试图获取非对象的属性”。但当演员不存在时,它工作正常。我看到发生了什么。如果您查看JSON响应。。在不匹配的情况下,它是一个对象{“errorcode:404,etc}
。当您获得匹配时,它是一个对象数组:[{result1}{result2}{etc}]
是的,返回两种不同类型的JSON。如何区分它们?基本上我应该在if语句中写什么来区分这两种JSON??
$output = json_decode($output);
if($output['errorcode']==400)
{
foreach($output as $key =>$row)
{
echo "<p>$key : $row";
echo '<br>';
}
}
else
{
foreach($output as $value)
{
foreach($value as $key =>$row)
{
if($key == "mediatype" || $key == "runtime" || $key == "unit" || $key == "show_id" )
continue;
else if($key == "show_cast" )
{
echo"<br>Show Cast:";
$pieces = explode(",", $row);
foreach($pieces as $strings)
{
$link='http://localhost:8000/?Title=&director=&Actor='.$strings;
echo "<li><a href='$link'>$strings</a>";
}
echo "<br>";
}
else if($key == "director" )
{
if(empty($row))
echo"<br>Director:No details of director<br>";
else
{
echo"<br>Director:";
$link='http://localhost:8000/?Title=&director='.$row.'&Actor=';
echo "<a href='$link'>$row</a><br>";
}
}
else if($key !="poster")
{
echo "$key : $row";
echo '<br>';
}
else
{
echo '<img src="'.$row.'" />';
}
}
echo "<br><br><br><br><br><br>";
}
}
$output = json_decode($output);
if(is_object($output) && isset($output->errorcode))
{
foreach($output as $key =>$row)
{
echo "<p>$key : $row";
echo '<br>';
}
}
else
{
// the rest
}