Hola
si es posible y harbour te brinda el manejo nativo de JSON, el proceso es bastane simnple
este es el codigo que uso para hacer el request a la web
Code: Select all
#define SEPCHAR "^"
FUNCTION GetDatas( cUrl, cHost )
LOCAL cRequest
LOCAL cResponse
LOCAL cBuffer
LOCAL pSocket
LOCAL nBytes
LOCAL nMaxBuff := 1024
LOCAL aResponse := {}
DEFAULT cHost := SET_HOST
HB_INetInit()
if cHost == SET_HOST
cUrl := "/webservice/"+cUrl
endif
pSocket := HB_INetConnect( cHost, 80 )
IF HB_INetErrorCode( pSocket ) <> 0
RETURN NIL
ELSE
cRequest := strTran( SET_REQUEST, "[URL]", cUrl )
cRequest := strTran( cRequest, "[HOST]", cHost )
nBytes := HB_INetSend( pSocket, cRequest )
cBuffer := SPACE(nMaxBuff)
cResponse := ""
DO WHILE nBytes > 0
nBytes := HB_INetRecv( pSocket, @cBuffer )
cResponse += LEFT( cBuffer, nBytes )
cBuffer := SPACE(nMaxBuff)
ENDDO
cResponse := HB_TRANSLATE( cResponse, "UTF8", "EN" )
aResponse = hb_ATokens( cResponse,SEPCHAR )
aResponse = ADel( aResponse, 1 )
aResponse = ASize( aResponse, Len( aResponse ) - 1 )
ENDIF
HB_INetClose( pSocket )
HB_INetCleanUp()
if aResponse == NIL
aResponse = {}
endif
RETURN aResponse
desde la web retornas un simple string con formato json (php, ruby, etc te dan soporte para eso)
ejemplo
^[{"fecha":"2012/05/21","cliente":"Harbour"}, {"fecha":"2012/05/21","cliente":"Fivewin"} ]
este simbolo "^" es importate para simplificar la tarea de separar la cabecera del mensaje
eso lo ves en esta parte del codigo
Code: Select all
aResponse = hb_ATokens( cResponse,SEPCHAR )
aResponse = ADel( aResponse, 1 )
aResponse = ASize( aResponse, Len( aResponse ) - 1 )
despues para tratar la respuesta es lo siguiente
Code: Select all
aPack = GetDatas( "mirequest", "mipagina.com" )
hb_jsonDecode( aPack[ 1 ], @jSon )
la variable
json tendra el hash con la la informacion... segun el ejemplo anterio, quedaria de esta manera
{ { "fecha" => "2012/05/21", "cliente"=>"harbour" }, { "fecha" => "2012/05/20", "cliente"=>"Fivewin" } }
? jSon[ 1 ][ "fecha" ] // 2012/05/21
? jSon[ 1 ][ "cliente" ] // Harbour
? jSon[ 2 ][ "fecha" ] // 2012/05/20
? jSon[ 2 ][ "cliente" ] // fivewin