rcdmk / aspJSON

A fast classic ASP JSON parser and encoder for easy JSON manipulation to work with the new JavaScript MV* libraries and frameworks.
MIT License
203 stars 89 forks source link

Can't access array after parse #94

Open mvlaran opened 4 years ago

mvlaran commented 4 years ago

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!

rcdmk commented 4 years ago

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.

mvlaran commented 4 years ago

Hi @rcdmk! Thanks for your reply.

It really appears to be a bug, since it only works by doing this workaround I mentioned...

ErnestoLopez commented 3 years ago

Hi,

The same thing happens to me, thanks for the trick to avoid it

Grettings.

rcdmk commented 1 year ago

Hi all,

A fix for this is on development branch (4b5fef0). Please feel free to test that out.

Best, Ricardo