Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re: How to encode/decode a class inside a class in JSON

by haj (Curate)
on Aug 20, 2020 at 11:03 UTC ( #11120928=note: print w/replies, xml ) Need Help??

in reply to How to encode/decode a class inside a class in JSON

Well, the root cause is that "plain" JSON actually doesn't know Perl objects: What JSON calls "objects", are actually hash references in Perl. Your TO_JSON method converts the inner object into a hash, but look closely at your output:

And we get output that looks good: {"NAME":"A instance","MY_CLASS_B":{"NAME":"B instance"}}

Actually, the output only appears to look good because you used "MY_CLASS_B" as the key in your object $a and as the class name for the object it contains. But look at your TO_JSON method: Actually, the class name MY_CLASS_B is missing from the serialized string, and therefore the deserializer couldn't bless the hash reference even if it wanted to.

That's why the either "tagging" or post-processing the JSON output, as mentioned in the section Object Serialization of the JSON docs, is required.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11120928]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (5)
As of 2021-01-28 00:04 GMT
Find Nodes?
    Voting Booth?