Convert to JSON string

Primary tabs

here is my $ZV string "Cache for Windows (x86-64) 2016.2.1 (Build 803) Wed Oct 26 2016 12:43:35 EDT"

 two questions

1. How do i convert any Persistent object to JSON String ?

2. How do i convert an y Register object to JSON string ?

3. Do i need to extend from any adaptor class for 1 & 2 ?

Replies

Hello Fab,

thanks for reply. Looks like in 2016.2, it has changed. I keep getting error when i execute

do myObject.$toJSON()

i tried to %ToJSON() as well. i get following error - <METHOD DOES NOT EXIST> *%ToJSON

But for that he needs to add an extending class to his classes. Using the native functions directly is less overhead.

%ToJSON() is only defined on objects extending %DynamicAbstractObject.
For example:

SAMPLES>s obj={"test":"42"}
SAMPLES>d obj.%ToJSON()
{"test":"42"}
SAMPLES>

To serialize arbitrary %Persistent/%Registered objects you'll have to use altJSONProvider
for example:

SAMPLES>s p=##class(Sample.Person).%OpenId(1)
SAMPLES>d ##class("%ZEN.Auxiliary.altJSONProvider").%WriteJSONFromObject(,.p)
{"_class":"Sample.Person","_id":1,"Name":"Love,Wolfgang A.","SSN":"917-96-1802","DOB":45275,"Home":{"_class":"Sample.Address","Street":"8360 First Street","City":"Zanesville","State":"WV","Zip":25788},"Office":{"_class":"Sample.Address","Street":"1842 Maple Court","City":"Hialeah","State":"NH","Zip":65893},"Spouse":"","FavoriteColors":[],"Age":"52"}

When I attempt to use "%ZEN.Auxiliary.altJSONProvider").%WriteJSONFromObject() on a rather large Object (non-dynamic) I receive a FRAMESTACK error, anyone else have the same issue?  If so, how did you overcome it?
 

What about %ZEN.Auxiliary.JSONProvider:%WriteJSONFromObject?

I am attempting to use this method to produce JSON output of my non-dynamic object, since non-dynamic objects do not provide a toJSON() method.  I am running version Cache for Windows (x86-64) 2016.2.1 (Build 806_0_17136U) Tue Mar 7 2017 12:25:45 EST

I should say that when I use the %ZEN method and grab the output in a file, the file is over 12MB, which leads me to believe that the FRAMESTACK error is caused by the many references to child objects within the parent.