I don't think parsing of JSON strings manually is a good idea, better to make URS to make parsing/conversions "automatically" - convert it into KVList object (and access it with functions KVListGet…)or to convert it to string in format key:value|key:value|.... and either manually parse it or access its elements with functions GetStringKey, ListGetString, etc.
1. If in macro code array is some Array and there is construction ReturnEx(0. array); then array will be serialized into string (as ReturnEx has type of second parameter STRING) and this string will be returned with ReturnData[] function in strategy. If array is something like ["abc", "cde", 123] then as serialized STRING it will be "#0:abc|#1:cde|#2:123". When serialized to string arrays/objects/KVLists by default has format key:value|key:value|...." (in case of array they keys have form like #num). You can either use list manipulation functions to get elements of such strings or you can parse such string (as its format is quite simple).
2. If in macro you pass back JSON presentation of array ReturnEx(0. JSON.strigify(array)) then what will be passed will be actual JSON string '["abc", "cde", 123].
After getting with ReturnData in strategy it can parsed/converted into KVList object (if LIST var= ReturnData[]) and after that elements of list objects can be accessed with LIST manipulation functions (KVListGet...). If needed the LIST value can be reassigned to some STRING variable and as result converted back to string but now it will be not JSON format but default one key:value|key:value|..... and see item 1.