我只需要显示 JSON 编码对象的一部分
Posted
技术标签:
【中文标题】我只需要显示 JSON 编码对象的一部分【英文标题】:I need to display only one part of a JSON encoded object 【发布时间】:2015-11-03 14:30:09 【问题描述】:您好,我是 php 新手,但已成功满足我的要求:
我试图只显示 JSON 解码对象的一部分。我已将对象称为$Results
。
我可以成功使用var_dump ($Results);
,然后得到完整的结果如下:
object(stdClass)[2]
public '0' =>
object(stdClass)[3]
public 'forename_1' => string 'JAMES' (length=5)
public 'middle1_1' => string '' (length=0)
public 'middle2_1' => string '' (length=0)
public 'middle3_1' => string '' (length=0)
public 'surname_1' => string 'TURNER' (length=7)
public 'Status' => int 100
然后我使用以下代码将其插入到表中:
<html>
<form id="client-details" action="/details.php" method="post">
<table>
<thead>
<tr>
<th>First Name</th>
<th>Surname</th>
<th>Search</th>
</tr>
</thead>
<?php foreach($Results as $o):?>
<tr>
<td id="forename"><?= $o->forename_1 ?></td>
<td id="surname"><?= $o->surname_1 ?></td>
<td><button type="submit" >More Info</button></td>
</tr>
<?php endforeach; ?>
</table></form>
</html>
问题出在这里 当我显示结果时,出现以下错误: “注意:试图获取非对象的属性..”
这似乎是因为我试图运行对象的public 'Status' => int 100
部分。
所以我的问题是: 如何阻止表格尝试填充该“状态”或如何完全忽略它?
编辑:
如果我愿意,我可以从 json_decode
获得结果作为关联数组而不是对象......这会帮助我忽略“状态”数组/对象吗?
【问题讨论】:
获取结果时查看代码 你的var_dump
只是显示$Result
在0
有另一个对象,所以你不能这样访问
@wilson - 我在获取结果时检查了代码:$Results = json_decode($Results);
我还可以通过说$Results=json_decode($Results, true);
将 JSON 作为关联数组返回?
【参考方案1】:
我想你弄错了。您正在做的是遍历对象的所有变量,即首先您获得公共变量 0(这也是一个对象),然后在语句 foreach 的第二次运行中您获得变量 Status 并且因为“Status”的值是 int 并且没有名为“forename_1”的属性,依此类推,您会收到该属性不存在的错误。
如果你真的想让它工作,你必须改变 JSON 对象的结构,这样你就可以遍历你想要显示的人的列表,比如:
object(stdClass)[2]
public 'list' =>
array(0 =>
object(stdClass)[3]
public 'forename_1' => string 'JAMES' (length=5)
public 'middle1_1' => string '' (length=0)
public 'middle2_1' => string '' (length=0)
public 'middle3_1' => string '' (length=0)
public 'surname_1' => string 'TURNER' (length=7)
public 'Status' => int 100,
1 =>
object(stdClass)[3]
public 'forename_1' => string 'JAMES' (length=5)
public 'middle1_1' => string '' (length=0)
public 'middle2_1' => string '' (length=0)
public 'middle3_1' => string '' (length=0)
public 'surname_1' => string 'TURNER' (length=7)
public 'Status' => int 100,
2 =>
object(stdClass)[3]
public 'forename_1' => string 'JAMES' (length=5)
public 'middle1_1' => string '' (length=0)
public 'middle2_1' => string '' (length=0)
public 'middle3_1' => string '' (length=0)
public 'surname_1' => string 'TURNER' (length=7)
public 'Status' => int 100
)
编辑:
如果您无法或不想更改数据结构,则将函数调用 json_decode 的结果作为关联数组获取,然后在 foreach 语句中检查所需字段是否存在:
$Result = json_decode($data, true);
<?php foreach($Results as $o):?>
<?php if(isset($o['forename_1']) && isset($o['surname_1'])): ?>
<tr>
<td id="forename"><?= $o['forename_1'] ?></td>
<td id="surname"><?= $o['surname_1'] ?></td>
<td><button type="submit" >More Info</button></td>
</tr>
<?php endif; ?>
<?php endforeach; ?>
【讨论】:
这是一个非常有用的评论!在我的具体情况下,我不能这样做:( --- 我直接从供应商网络服务获取对象,我不想在使用它们之前重建任何数据或结果。【参考方案2】:我找到了一个可以接受的解决方案!
通过在我的 json_decode 行中添加true
:
$Results = json_decode($serviceResponse, true);
我将结果作为关联数组而不是对象返回。
然后我将每个<tr>
中的代码更改如下:
<html>
.... (rest of code here)
<?php foreach($Results as $person):?>
<tr>
<td id="forename"><?= $person['forename_1'] ?></td>
<td id="surname"><?= $person['surname_1'] ?></td>
<td><button type="submit" >More Info</button></td>
</tr>
<?php endforeach; ?>
</table>
</form>
</html>
所以现在发生的情况是,返回错误的最后一行 'status'
现在只是一个空行。
虽然这不是一个完美的解决方案,但当我以 HTML 格式查看页面时,我不介意处理一个空的表格行。
【讨论】:
你可以用这个 if 语句绕过它: "if(isset($person['forename_1']) && isset($person['surname_1']))" 然后显示该行,否则不显示做任何事 我试过了 - 没用......也许我把代码放在了错误的地方......我在这里学习;)【参考方案3】:试试这个:
<html>
<form id="client-details" action="/details.php" method="post">
<table>
<thead>
<tr>
<th>First Name</th>
<th>Surname</th>
<th>Search</th>
</tr>
</thead>
<?php foreach($Results as $o=>$v)?>
<tr>
<td id="forename"><?= $v->forename_1 ?></td>
<td id="surname"><?= $v->surname_1 ?></td>
<td><button type="submit" >More Info</button></td>
</tr>
<?php ?>
</table></form>
</html>
【讨论】:
我试过了——没有运气——“状态”一直在尝试迭代【参考方案4】:尝试这样打印:
<?php foreach($Results as $o):?>
<tr>
<td id="forename"><?= $o['forename_1']; ?></td>
<td id="surname"><?= $o['surname_1'] ?></td>
<td><button type="submit" >More Info</button></td>
</tr>
<?php endforeach; ?>
【讨论】:
以上是关于我只需要显示 JSON 编码对象的一部分的主要内容,如果未能解决你的问题,请参考以下文章