Question
· Jul 15, 2021

Parsing error

After calling an API with

 

Do request.Get("/api/address/listing")

Set data = {}.%FromJSON(request.HttpResponse.Data)

 

I get this error: 

 

<THROW>%FromJSON+37^%Library.DynamicAbstractObject.1 *%Exception.General Premature end of data 12 Line 1 Offset 0

 

any clue what might be causing this?

Product version: Ensemble 2018.1
Discussion (9)0
Log in or sign up to continue

If I do 

Set stream=##class(%FileBinaryStream).%New()

Write stream.CopyFrom(getStaffReq.HttpResponse.Data)

I get this large output:

v¯fAPI\-e^zCopyFrom+1^%Library.FileBinaryStream.1^1-e^zGetStaffRequest+21^CompBI.bo.APITest.1^1"d^^%Library.FileBinaryStream.1^0,E^zSizeGet+1^%Library.FileBinaryStream.1^1e^^CompBI.bo.APITest.1^0'd^^%Library.DynamicAbstractObject.1^03E^%FromJSON+37^%Library.DynamicAbstractObject.1^1e^^CompBI.bo.APITest.1^0"d^^%Library.FileBinaryStream.1^0-E^zCopyFrom+2^%Library.FileBinaryStream.1^1e^^CompBI.bo.APITest.1^0"d^^%Library.FileBinaryStream.1^0-E^zCopyFrom+2^%Library.FileBinaryStream.1^1e^^CompBI.bo.APITest.1^0d^^CompBI.bo.APITest.1^0E^^CompBI.bo.APITest.1^0'd^^%Library.DynamicAbstractObject.1^03E^%FromJSON+37^%Library.DynamicAbstractObject.1^1e^^CompBI.bo.APITest.1^0'd^^%Library.DynamicAbstractObject.1^03E^%FromJSON+37^%Library.DynamicAbstractObject.1^1e^^CompBI.bo.APITest.1^0'd^^%Library.DynamicAbstractObject.1^03E^%FromJSON+37^%Library.DynamicAbstractObject.1^1e^^CompBI.bo.APITest.1^0'd^^%Library.DynamicAbstractObject.1^03E^%FromJSON+37^%Library.DynamicAbstractObject.1^1e^^CompBI.bo.APITest.1^0'd^^%Library.DynamicAbstractObject.1^03E^%FromJSON+37^%Library.DynamicAbstractObject.1^1e^^CompBI.bo.APITest.1^0'd^^%Library.DynamicAbstractObject.1^03E^%FromJSON+37^%Library.DynamicAbstractObject.1^1e^^CompBI.bo.APITest.1^0d^^CompBI.bo.APITest.1^0E^^CompBI.bo.APITest.1^0d^^CompBI.bo.APITest.1^0E^^CompBI.bo.APITest.1^0d^^CompBI.bo.APITest.1^0E^^CompBI.bo.APITest.1^0'd^^%Library.DynamicAbstractObject.1^03E^%FromJSON+37^%Library.DynamicAbstractObject.1^1e^^CompBI.bo.APITest.1^0d^^CompBI.bo.APITest.1^0E^^CompBI.bo.APITest.1^0d^^CompBI.bo.APITest.1^0E^^CompBI.bo.APITest.1^0'd^^%Library.DynamicAbstractObject.1^03E^%FromJSON+37^%Library.DynamicAbstractObject.1^1e^^CompBI.bo.APITest.1^0'd^^%Library.DynamicAbstractObject.1^03E^%FromJSON+37^%Library.DynamicAbstractObject.1^1e^^
CompBI.bo.APITest.1^0d^^^

Obviously, the response.Data does not contain valid JSON. You can simply check the received data by putting the data aside in a temporary global, something like this:

do request.HttpResponse.Data.Rewind()
set ^temp.debug($j,"size")=request.HttpResponse.Data.Size
set ^("data")=request.HttpResponse.Data.Read(request.HttpResponse.Data.Size)  // or just the first 1000 bytes
zw ^temp.debug

Now you can take a look on the incoming data, maybe there is an encoding problem or the data do not adhere to JSON specification

Strangely, I recreated that same logic in Powershell using Invoke-Webrequest, and it printed out the json list I'm looking for just fine when I called the API, with a 200 code of success. When I print out the status code in the terminal for the objectscript code, it returns 302, which is a URL redirect, yet they both look as if they have the same functionality.