FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour JSON response
Posts: 708
Joined: Fri Oct 28, 2005 09:53 AM
JSON response
Posted: Tue Jan 02, 2018 11:32 PM

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!

*~*~*~*~*~*~*~*~*~*
Darrell Ortiz
CDM Software Solutions, Inc.
https://www.cdmsoft.com
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: JSON response
Posted: Tue Jan 02, 2018 11:46 PM
Try with

Code (fw): Select all Collapse
Function MyJson( cStr )

   local hHash
   local nLen

   nLen    := hb_JsonDecode( cStr, @hHash )
   if !Empty( nLen )
       XBrowser hHash Setup ( oBrw:AutoFit() )
   endif

Return nil
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 708
Joined: Fri Oct 28, 2005 09:53 AM
Re: JSON response
Posted: Wed Jan 03, 2018 12:18 PM

Dear Cristobal,

Thank you! Do you have an example that would load to an array?

Sincerely,

*~*~*~*~*~*~*~*~*~*
Darrell Ortiz
CDM Software Solutions, Inc.
https://www.cdmsoft.com
Posts: 375
Joined: Tue Feb 10, 2015 09:48 AM
Re: JSON response
Posted: Wed Jan 03, 2018 01:03 PM
verily hb_JsonDecode return the type based on text, the code
Code (fw): Select all Collapse
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 (javascript): Select all Collapse
<div class="javascript" id="{CB}" style="font-family: monospace;">undefined --> NIL (U)
true --> .T. (L)
54 -->         54 (N)
"aa" --> aa (C)
{"a":4} -->  (H)
[1,2,3] -->  (A)</div>
Posts: 3022
Joined: Fri Oct 07, 2005 01:45 PM
Re: JSON response
Posted: Wed Jan 03, 2018 06:19 PM
The value of a JSON file is the data encoded in it. Usually, you send a json text, and receive back a response.

Code (fw): Select all Collapse
  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 (fw): Select all Collapse
          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
Tim Stone
http://www.MasterLinkSoftware.com
http://www.autoshopwriter.com
timstone@masterlinksoftware.com
Using: FWH 23.10 with Harbour 3.2.0 / Microsoft Visual Studio Community 2022-24 32/64 bit

Continue the discussion