I think the suggested decode function would be the best way to handle this.
What about JsonDeserializable? I would like to have the choice to have a
serialize-only operation.
On Mon, Jul 13, 2015 at 10:13 AM, Dean Eigenmann dean.eigenmann@icloud.com
wrote:
The Additional function you have proposed seems like the easiest and best
way to do it currently without changing the language. I was thinking of
giving the cast syntax special meaning if used in connection with
json_decode, but this would most likely be near to impossible.
On Jul 13, 2015, at 04:08 PM, "Sebastian B.-Hagensen" <
sbj.ml.read@gmail.com> wrote:
Hi,
I like the general idea behind that proposal.
I'm not sure how you would want to implement that however (please
expand the rfc on that topic).
Do you want to give the cast syntax a special meaning if used in
connection with json_decode or add the general ability to
cast a stdClass object (as returned by json_decode) to a specific user
type or do you want to change json_decode to return a new class
(extending stdclass) that can be casted in the way you want? The first
two could be considered fundamental changes to the language, the third
may include serious bc concerns.
Wouldn't an additional function (maybe in addition to your proposed
interface; example: json_decode_to(string $json, string $className,
int $options)) solve the issue without changing the language?
Regards,
2015-07-13 15:22 GMT+02:00 Dean Eigenmann dean.eigenmann@icloud.com:
Ive just opened a new RFC https://wiki.php.net/rfc/jsonserializable
regarding Json to Object unserialization.
--
Guilherme Blanco
MSN: guilhermeblanco@hotmail.com
GTalk: guilhermeblanco
Toronto - ON/Canada
Ive just opened a new RFC https://wiki.php.net/rfc/jsonserializable
regarding Json to Object unserialization.
I like the idea, but how do you handle complex json notations, that may
contain arrays of objects? Say:
{
"id": 123
"type": "user",
"name": "derokorian"
"permissions": [{
"id": 1,
"value": "create"
},{
"id": 2,
"value": "edit"
}]
}
Would this new function give me objects of type Permission in the
permissions array, or would this solution only be a single level deep and
therefore return an array of StdClass? I see no way to be able to tell this
to the decoder in the User class because php does not support typed arrays.
Ryan,
I think the usage of this won't support multidimensional arrays.
However in the decode function,
You could specify
Foreach ($arr['permission'] as $permission) {
$this->permissions[] = (permission) json_decode($permission);
}
Sent from my iPhone
Ive just opened a new RFC https://wiki.php.net/rfc/jsonserializable
regarding Json to Object unserialization.
I like the idea, but how do you handle complex json notations, that may contain arrays of objects? Say:
{
"id": 123
"type": "user",
"name": "derokorian"
"permissions": [{
"id": 1,
"value": "create"
},{
"id": 2,
"value": "edit"
}]
}Would this new function give me objects of type Permission in the permissions array, or would this solution only be a single level deep and therefore return an array of StdClass? I see no way to be able to tell this to the decoder in the User class because php does not support typed arrays.
Ive just opened a new RFC https://wiki.php.net/rfc/jsonserializable
regarding Json to Object unserialization.I like the idea, but how do you handle complex json notations, that may
contain arrays of objects? Say:
{
"id": 123
"type": "user",
"name": "derokorian"
"permissions": [{
"id": 1,
"value": "create"
},{
"id": 2,
"value": "edit"
}]
}Would this new function give me objects of type Permission in the
permissions array, or would this solution only be a single level deep and
therefore return an array of StdClass? I see no way to be able to tell this
to the decoder in the User class because php does not support typed arrays.
This is my concern as well. There's also the fact that even for
simple objects, having the json_*() api aware of deserialization rules
is over-engineered.
$obj = json_decode_to_class($json, 'User');
Could as easily be written as:
$obj = User::createFromStdClass(json_decode($json));
And that's logic you can implement entirely in userspace without the
need to worry about what versions support that interface. Firther,
for more complex ovhects like the one Ryan described above, your
createFrom*() functions have the context of how to deal with child
elements, e.g.:
class User {
public static function createFromStdClass(stdClass $obj) {
/* make an initial object from basic props... */
foreach ($obj->permissions as $perm) {
$ret->addPermission(UserPermissions::createFromStdClass($perm));
}
return $ret;
}
}
I don't think we need a formal API in the standard runtime for this,
particularly as it fails at anything beyond the most simple use cases.
-Sara