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

 ID:                 42270
 Comment by:         serg4172 at mail dot ru
 Reported by:        steven dot mccoy at miru dot hk
 Summary:            stdClass could not be converted to string
 Status:             Bogus
 Type:               Bug
 Package:            JSON related
 Operating System:   Ubuntu 7.04
 PHP Version:        5.2.4RC1-dev
 Block user comment: N
 Private report:     N

 New Comment:

This is really json problem. Although I have PHP 5.3.3 I have the same
issue.



$params = json_decode($options);



This produce error



Object of class stdClass could not be converted to string



i solved i like this



$params = json_decode(trim(str_replace("\r\n", '\\n', $options)));


Previous Comments:
------------------------------------------------------------------------
[2007-08-17 19:57:20] j...@php.net

Okay, so you think array_diff() is broken. As our bug system sucks,
can't edit original comment, etc. so please, open new short report about
the array_diff issue. (this one is a bit confusing with the json stuff
and all) And make sure the new report does not have any references to
JSON. :D

------------------------------------------------------------------------
[2007-08-17 14:59:33] steven dot mccoy at miru dot hk

Well its either json_decode not making stdClass objects friendly for
comparison or array_diff() that broke.  Lets try the latter then.

------------------------------------------------------------------------
[2007-08-17 13:27:29] j...@php.net

So this has nothing to do with JSON? Please reclassify if that is true
and fix the summary to contain what the bug is really about..

------------------------------------------------------------------------
[2007-08-16 12:11:34] steven dot mccoy at miru dot hk

The situation I'm using it in is where the browser sends an array of
objects to PHP.  The PHP scripts uses PEAR::DB_DataObject to generate an
array of objects inside a database table, I then use
array_diff/array_udiff to calculate what is new, what has changed, and
what should be deleted.  The array_diff for items that have not changed
fails in 5.2 because PHP fails be able to compare some of the stdClass
objects.



 $new_products = array_filter($products,
array('Order','is_new_product'));

 debug('new_order_products: '.count($new_products).' found');

 $old_products = array_diff($new_products, $products);

 debug('old_order_products: '.count($old_products).' calculated');

 $updated_products = array_udiff($old_products, $current_products,
array('Order', 'product_compare'));

 debug('updated_order_products: '.count($updated_products).' found');

 $deleted_products = array_udiff($current_products, $products,
array('Order', 'product_compare_by_id'));

 debug('deleted_order_products: '.count($deleted_products).' found');





PEAR::DB_DataObject returns table rows as objects, the PHP JSON module
defaults to objects, but can include arrays of objects as shown
previously.



As a workaround I rebuilt PHP 5.1.6 from Ubuntu 6.10 on 7.04.  If
someone can provide a array_udiff function that can compare objects like
before that would be great :-)



If the current circumstances are not clear, I will repeat:  PHP 5.1.6
generates the expected result output as shown, PHP 5.2 does not.

------------------------------------------------------------------------
[2007-08-16 11:52:54] j...@php.net

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?

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


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    http://bugs.php.net/bug.php?id=42270


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

Reply via email to