Page 1 of 1
JSON response
Posted: Tue Jan 02, 2018 11:32 pm
by cdmmaui
Happy New Year Everyone!
I see lots of information about JSON. I was wondering if there was function or sample code that can read JSON response and store to an array?
Thank you!
Re: JSON response
Posted: Tue Jan 02, 2018 11:46 pm
by cnavarro
Try with
Code: Select all
Function MyJson( cStr )
local hHash
local nLen
nLen := hb_JsonDecode( cStr, @hHash )
if !Empty( nLen )
XBrowser hHash Setup ( oBrw:AutoFit() )
endif
Return nil
Re: JSON response
Posted: Wed Jan 03, 2018 12:18 pm
by cdmmaui
Dear Cristobal,
Thank you! Do you have an example that would load to an array?
Sincerely,
Re: JSON response
Posted: Wed Jan 03, 2018 1:03 pm
by AntoninoP
verily hb_JsonDecode return the type based on text, the code
Code: Select all
proc testJSON(cStr)
LOCAL r := hb_jsonDecode(cStr)
? cStr, "-->", r, "("+valtype(r)+")"
proc main()
testJSON('undefined')
testJSON('true')
testJSON('54')
testJSON('"aa"')
testJSON('{"a":4}')
testJSON('[1,2,3]')
prints:
Code: Select all
undefined --> NIL (U)
true --> .T. (L)
54 --> 54 (N)
"aa" --> aa (C)
{"a":4} --> (H)
[1,2,3] --> (A)
Re: JSON response
Posted: Wed Jan 03, 2018 6:19 pm
by TimStone
The value of a JSON file is the data encoded in it. Usually, you send a json text, and receive back a response.
Code: Select all
aInfo := { }
cJson :='{"vin":"' + cVin + '"}'
oHttp:Send(cJson)
cRet := ""
cRtext := oHttp:responseText
nLen := hb_jsondecode( cRtext, @cRet )
Now cRet contains all of the values. You can add them to an array using:
Code: Select all
AADD( aInfo, "LAST REPORTED SERVICES:")
FOR EACH o IN cRet["serviceHistory"]["serviceCategories"]
SC1 := o["serviceName"]
SC2 := o["dateOfLastService"]
nRetItm := 0
IF HHasKey( o, "odometerOfLastService" )
nRetItm := o["odometerOfLastService"]
ENDIF
SC3 := STR( nRetItm ) //HB_HGETDEF( o, "odometerOfLastService", 0 ),8)
aadd( aInfo, "> " + SC1 + " performed on " + SC2 + " Odometer: " + SC3 )
NEXT
Who ever supplies the data will give you the identifiers for their JSON fields and the structure. I hope this helps.
Tim