aspJSON
aspJSON copied to clipboard
Can't access array after parse
There is an API that responds with JSON arrays. The response can be an empty array [] or [{...}, {...}, {...}] an array with one or more objects. Here it its one example of a response:
[{
"entityId": "74c975351-3fe7-4a5c-91d6-15b73e1304cd",
"entityCoords": {
"x": 100,
"y": 825,
"offsetX": 160,
"offsetY": 215
}
}]
As I receive the response from the API, I try to parse the string so I can verify how many objects are there, if any, and, for each one, get the information I need:
Set JSONResponse = New JSONObject
JSONResponse.Parse(APIResponse)
There is no error with that, but I can't access the JSONResponse object, no matter how I try, but if I write it down, I can see its contents, so JSONResponse.Write gives:
{"data":[{"entityId": "74c975351-3fe7-4a5c-91d6-15b73e1304cd","entityCoords": {"x": 100,"y": 825,"offsetX": 160,"offsetY": 215}}]}
But JSONResponse("data") is null/empty, JSONResponse.length or JSONResponse.items raises errors.
I figured out that if I parse the response in a temporary JSONObject and then, parse its serialization:
Set JSONResponse = New JSONObject
Set JSONTmp = New JSONObject
JSONTmp.parse(APIResponse)
JSONResponse.Parse(JSONTmp.serialize())
JSONResponse("data") become accessible as well I can get JSONRespose("data").length and iterate over the array, if any data is present.
Is this behaviour ok?! Or did I do something wrong in the first place?
Thanks!
Hi @mvlaran,
That behavior is not expected. You should be able to access the data property on the object, so I need to check if there is a bug there.
Usually, when parsing arrays, the Parse method returns a JSONArray object that enables you to access and iterate the items. This should work without problems.
You can see some examples in the README.
Hi @rcdmk! Thanks for your reply.
It really appears to be a bug, since it only works by doing this workaround I mentioned...
Hi,
The same thing happens to me, thanks for the trick to avoid it
Grettings.
Hi all,
A fix for this is on development branch (4b5fef0). Please feel free to test that out.
Best, Ricardo