Here's a small test/proof that makes it easy to see some comparative results. Null was the one I was interested in since it was not documented:<?phpclass jsontest implements JsonSerializable { function __construct($value) { $this->value = $value; } function jsonSerialize() { return $this->value; }}print "Null -> " . json_encode(new jsontest(null)) . "\n";print "Array -> " . json_encode(new jsontest(Array(1,2,3))) . "\n";print "Assoc. -> " . json_encode(new jsontest(Array('a'=>1,'b'=>3,'c'=>4))) . "\n";print "Int -> " . json_encode(new jsontest(5)) . "\n";print "String -> " . json_encode(new jsontest('Hello, World!')) . "\n";print "Object -> " . json_encode(new jsontest((object) Array('a'=>1,'b'=>3,'c'=>4))) . "\n";?>Output is:Null -> nullArray -> [1,2,3]Assoc. -> {"a":1,"b":3,"c":4}Int -> 5String -> "Hello, World!"Object -> {"a":1,"b":3,"c":4}