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