1

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 出力に入らないようにするにはどうすればよいですか?

4

2 に答える 2

4

JsonSerializablePHP >= 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;
    }
}
于 2013-07-05T19:56:06.873 に答える
0

1 つの方法は、array_filter() を使用して NULL または false 要素を削除することです。これはうまくいくはずです:

# Populate the JSON array
$jsonArr[] = array_filter($equip);

詳細については、 array_filter() のドキュメントを参照してください。コールバックが渡されない場合、FALSE と評価されるものはすべて削除されるため、ブール値を $var1 または $var2 に格納する予定がある場合、このソリューションは機能しないことに注意してください。

注: @jcsanyi の解決策が最適だと思いますが、これが最も簡単な解決方法だと思います。

于 2013-07-05T19:55:53.837 に答える