Doc #42001 [Com]: json_encode() does not work on all types

From: Date: Tue, 09 Jul 2013 22:47:40 +0000
Subject: Doc #42001 [Com]: json_encode() does not work on all types
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-10061@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=42001&edit=1 ID: 42001 Comment by: hanskrentel at yahoo dot de Reported by: stefan dot priebsch at e-novative dot de Summary: json_encode() does not work on all types Status: Not a bug Type: Documentation Problem Package: Documentation problem Operating System: irrelevant PHP Version: Irrelevant Block user comment: N Private report: N New Comment: for json_encode() objects are first cast into an array. then they are JSON encoded as JSON objects. The problems discussed here are therefore actually caused by the weird way how simplexmlelement has implemented the to-array cast. Next to empty or whitespace-only prefixed CDATA nodes more problems can be seen with all DOM node-types simplexmlelement does not give an interface for: comments and processing instructions. normally those are not accessible, however when casting to array those are offered in a somehow crippled way. just leaving a comment here as i haven't seen much other related discussion about the topic online. Previous Comments: ------------------------------------------------------------------------ [2007-08-16 12:14:48] vrana@php.net Problem is that SimpleXML ignored CDATA. json_encode() thus cannot encode it. ------------------------------------------------------------------------ [2007-07-17 07:54:06] derick@php.net Well, although I also think this could be a bug, it should at least be clarified in the documentation as it's not clear enough now it seems. (Please don't change the summary though) ------------------------------------------------------------------------ [2007-07-17 07:46:39] stefan dot priebsch at e-novative dot de Anthony, I am terribly sorry, but I completely fail to see your point. What is the difference between an object and its data? An object is code+data, and I am sure that we'll agree that no code will ever be serialized or show up when something is cast to string. Besides, look at more complex examples: They work fine when *not* cast to string. When casting to string, json_encode() does not work at all. When json_encoding a complex XML structure, however, CDATA still does not show up - this is a bug. Example: $xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><test><sub>test</sub><another>value</another><path><to><tag>something</tag></to></path></test>'); var_dump(json_encode($xml)); var_dump(json_encode((string) $xml)); $xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><test><sub><![CDATA[test]]></sub><another>value</another><path><to><tag>something</tag></to></path></test>'); var_dump(json_encode($xml)); var_dump(json_encode((string) $xml)); So the situation is: you are telling me to cast to string before encoding. This works on "primitive" XML, but not on real one with nested tags. Encoding nested tags works fine if not casting to string, though, except for the fact that CDATA does not show up. ------------------------------------------------------------------------ [2007-07-16 21:52:58] tony2001@php.net >json_encode() does not work with SimpleXML data that contains CDATA. json_encode() encodes THE OBJECT, but you actually meant to encode IT'S DATA. To do that you need to cast it to string, as I've said in the original report. >Either this is a bug in PHP (which you claim it is not, bogusifying >my bug report) or the documentation is inaccurate. The function works as expected and the docs are correct. Please read what I'm writing to you. We're not going to explain every possible user error in the docs, it would take gigabytes otherwise. ------------------------------------------------------------------------ [2007-07-16 21:43:43] stefan dot priebsch at e-novative dot de json_encode() does not work with SimpleXML data that contains CDATA. Either this is a bug in PHP (which you claim it is not, bogusifying my bug report) or the documentation is inaccurate. As a PHP developer I don't really care wether SimpleXML data is serialized to json_encode() it or not, I care wether the conversion works for all types as the manual suggests - and it does not. As you don't consider #41976 a bug in PHP, you should at least change the manual. You can't just claim json_encode() works on any data type, when it does not. ------------------------------------------------------------------------ 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 https://bugs.php.net/bug.php?id=42001 -- Edit this bug report at https://bugs.php.net/bug.php?id=42001&edit=1

« previous php.doc.bugs (#10061) next »