ID: 42270
Updated by: [EMAIL PROTECTED]
Reported By: steven dot mccoy at miru dot hk
-Status: Open
+Status: Feedback
Bug Type: JSON related
Operating System: Ubuntu 7.04
PHP Version: 5.2.4RC1-dev
New Comment:
Here's what I get for the encode:
{"first":[{"second":2},"two","three"]}
So actually you have another object inside the first, here's
var_dump($obj);
object(stdClass)#1 (1) {
["first"]=>
array(3) {
[0]=>
object(stdClass)#2 (1) {
["second"]=>
int(2)
}
[1]=>
string(3) "two"
[2]=>
string(5) "three"
}
}
And using json_decode($json, true):
array(1) {
["first"]=>
array(3) {
[0]=>
array(1) {
["second"]=>
int(2)
}
[1]=>
string(3) "two"
[2]=>
string(5) "three"
}
}
So what's the bug?
Previous Comments:
------------------------------------------------------------------------
[2007-08-16 11:46:15] [EMAIL PROTECTED]
See also bug #42303
------------------------------------------------------------------------
[2007-08-13 21:34:06] crrodriguez at suse dot de
Workaround : use array_udiff with a supplied callback function or use
only arrays.
------------------------------------------------------------------------
[2007-08-12 06:54:01] steven dot mccoy at miru dot hk
Reproduced with the Win32 CVS build:
PHP 5.2.4RC1-dev (cli) (built: Aug 12 2007 00:04:25)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
------------------------------------------------------------------------
[2007-08-11 06:13:57] steven dot mccoy at miru dot hk
Description:
------------
This might be related to bug 41221, upgrading from PHP 5.1.6-1 (Debian)
to 5.2.1 (Ubuntu) created a regression in handling output of JSON
decoding.
Does this mean that I can only use arrays ( json_decode($json, true) ),
and have to update all code appropriately?
Reproduce code:
---------------
<?php
$array = array(
"first" => array(array("second" => 2), "two",
"three"),
);
$json = json_encode($array);
$obj = json_decode($json);
var_dump(array_diff($array,$obj->first));
?>
Expected result:
----------------
array(1) {
["first"]=>
array(3) {
[0]=>
array(1) {
["second"]=>
int(2)
}
[1]=>
string(3) "two"
[2]=>
string(5) "three"
}
}
Actual result:
--------------
Catchable fatal error: Object of class stdClass could not be converted
to string in /tmp/- on line 7
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=42270&edit=1