ID:               46600
 Updated by:       [EMAIL PROTECTED]
 Reported By:      Matt at mpcm dot com
 Status:           Verified
 Bug Type:         JSON related
 Operating System: *
 PHP Version:      5CVS, 6CVS (2008-11-18)
 New Comment:

I believe this is not a bug, but a feature.

An object *can't* have an empty property (while an array can).

If you want to use json_decode() with json containing empty key, either
access those empty key using special keyword "_empty_", or put the
optionnal $assoc parameter of json_decode() to true to get result as an
array.

If you want objects to support empty keys, I believe this is not going
to happen soon, as this is enforced by a specific error message.

Fatal error: Cannot access empty property in php shell code on line 1

Please note that a property name starting with NULL character won't
work either.


Previous Comments:
------------------------------------------------------------------------

[2008-11-18 17:35:30] matt at mpcm dot com

The language seems to create a key that cannot be reached, so even if
this `bug` is fixed, we am still facing a broader issue it seems.

<?
$key = "";
$o = (object) array($key=>4,"example"=>8);
var_dump($o);
print 'blank key test:' . (isset($o->$key)?'true':'false');
print $o->{$key};
var_dump($o->$key);
?>

output:
object(stdClass)#1 (2) {
  [""]=>
  int(4)
  ["example"]=>
  int(8)
}
blank key test:false<br />
<b>Fatal error</b>:  Cannot access empty property in
<b>PHPDocument1</b> on line <b>8</b><br />
All throws Notice: line 4 - Illegal member variable name

------------------------------------------------------------------------

[2008-11-18 15:43:05] matt at mpcm dot com

All the work arounds I am looking at are throwing Error Text: Illegal
member variable name when I convert/cast an object with a blank
property.

Is this json_decode `bug` a result of a larger object mechanism
limitation inside of php's object handling?

------------------------------------------------------------------------

[2008-11-18 03:13:51] Matt at mpcm dot com

Description:
------------
json_decode() treats empty property name as "_empty_" not "". This was
fixed in #41504 for arrays, but not for objects. (seems to happen in PHP
Version 5.2.4-2ubuntu5.3 and 5.3.0alpha2.

Reproduce code:
---------------
<?
$s = '{"":"test"}';
var_dump(json_decode($s));
?>


Expected result:
----------------
object(stdClass)#1 (1) { [""]=>  string(4) "test" }

Actual result:
--------------
object(stdClass)#2 (1) { ["_empty_"]=>  string(4) "test" }


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=46600&edit=1

Reply via email to