如果我在PHP 5.5中有这个代码/类,那么我将把它放在一个JSON数组中:
# Define the class
class Equip {
public $var1 = null;
public $var2 = null;
}
# For debugging purpose only - specify what should be shown
$show_var1 = false;
$show_var2 = true;
while loop ...
# Initialize a new class member
$equip = new Equip();
# Only populate the variable if it should be shown
if($show_var1) {
$equip->var1 = $var1;
}
# Only populate the variable if it should be shown
if($show_var2) {
$equip->var2 = $var2;
}
# Populate the JSON array
$jsonArr[] = $equip;
end while ...
# Output the JSON encoded array
echo json_encode($jsonArr, JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK);
它将导致此输出(其中 var1 始终为NULL):
[
{
"var1": null,
"var2": 656978
},
{
"var1": null,
"var2": 136981
}
]
如何隐藏 var1 变量以获取JSON输出?
答案 0 :(得分:4)
查看JsonSerializable
界面,可在PHP> = 5.4中找到。
如果您将类实现JsonSerializable
,则可以实现jsonSerialize()
方法以仅返回应编码的数据。
class Equip implements JsonSerializable {
public $var1 = null;
public $var2 = null;
public function jsonSerialize() {
$out = array();
if (!is_null($this->var1)) $out['var1'] = $this->var1;
if (!is_null($this->var2)) $out['var2'] = $this->var2;
return $out;
}
}
答案 1 :(得分:0)
一种方法是使用array_filter()删除NULL或false元素。这应该有效:
# Populate the JSON array
$jsonArr[] = array_filter($equip);
有关详细信息,请参阅array_filter() documentation。请记住,如果没有传入回调,则会删除任何计算结果为FALSE的内容,因此如果您计划在$ var1或$ var2中存储布尔值,则此解决方案将无效。
注意:我认为@ jcsanyi的解决方案是最好的,但我认为这可能是最简单的方法来解决它。