Seems overly complicated... but perhaps I'm missing something. Perhaps you can point to an example... Eager to learn.
What I ended up doing is generating JSON for the master records, and then looping through to create a child records cursor for each master record, generating JSON from that, and using StringReplace() to insert the children into the master JSON string:
SELECT ..., "Images4"+Listings.ListCode AS Images ;FROM ./Condo/Listings ; INTO CURSOR TQuery READWRITE lcReturnValue = loSerializer.Serialize("cursor:TQuery")SCANSELECT ..., TRANSFORM(ImageList.ImgCode) + [.] + ALLTRIM(ImageList.ImgType) AS ImgSrc ;FROM ImageList ; WHERE ImageList.ListCode = TQuery.ListCode ; INTO CURSOR TImageList* Extract to JSON lcImageList = loSerializer.Serialize("cursor:TImageList") lcImageList = STRTRAN(lcImageList,["Rows"],["image"]) lcTextToReplace = ["Images4] + TQuery.ListCode + ["] lcReturnValue = STRTRAN(lcReturnValue,lcTextToReplace,lcImageList)SELECT TQueryENDSCAN