Bapu Hirave · Mar 24, 2017

Convert to JSON string

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 ?

0 4,102
Discussion (11)0
Log in or sign up to continue

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"}

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. 

Anyone have pointers for 2014.1.5?