Bom dia pessoal, Estou fazendo testes no Google Cloud Message para o envio de push notifications em um aplicativo da empresa e consigo fazer com total sucesso. O problema mesmo é tratar o retorno do JSON. Estou tentando o código abaixo e não entendo o que esta errado, estou seguindo as instruções do próprio help do progress: Código: DEFINE INPUT PARAMETER cTitle AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER cMessage AS CHARACTER NO-UNDO. DEFINE INPUT PARAMETER gcmId AS CHARACTER NO-UNDO. DEFINE VARIABLE cSourceType AS CHARACTER NO-UNDO. DEFINE VARIABLE lRetOK AS LOGICAL NO-UNDO. DEFINE VARIABLE ttRetorno AS HANDLE NO-UNDO. DEFINE VARIABLE cReadMode AS CHARACTER NO-UNDO. DEFINE VARIABLE strURL AS LONGCHAR NO-UNDO. ASSIGN strURL = "https://android.googleapis.com/gcm/send" cSourceType = "LONGCHAR" cReadMode = "MERGE". /* Variaveis da consulta ao webservice */ DEFINE VARIABLE http AS COM-HANDLE. DEFINE VARIABLE strRET AS LONGCHAR. DEFINE VARIABLE cBody AS CHARACTER NO-UNDO. /* Le a informação do Retorno */ CREATE "MSXML2.XMLHTTP.3.0" http NO-ERROR. http:OPEN("POST", strURL, FALSE). http:setRequestHeader("Authorization", "key=chave"). http:setRequestHeader("Content-Type", "application/json"). /* cBody = CHR(123) + '"data": ' + CHR(123) + '"type":"' + "1" + '",' + '"title":"' + cTitle + '",' + '"message":"' + cMessage + '"' + CHR(125) + ',' + '"to"' + ' : ' + '"' + gcmId + '"' + CHR(125). */ cBody = CHR(123) + '"data": ' + CHR(123) + '"type":"' + "1" + '",' + '"title":"' + cTitle + '",' + '"message":"' + cMessage + '"' + CHR(125) + ',' + '"registration_ids"' + ' : ' + '[' + gcmId + ']' + CHR(125). http:SEND(cBody) NO-ERROR. /* Armazena o retorno */ ASSIGN strRET = http:responseText. CREATE TEMP-TABLE ttRetorno. lRetOK = ttRetorno:READ-JSON(cSourceType, strRET, cReadMode). /* Se tiver erro, retorna o erro */ MESSAGE lRetOK VIEW-AS ALERT-BOX INFO BUTTONS OK. Surge a mensagem: "Erro de parsing de JSON: esperado brace, mas localizado {. (15358)". Um "brace" não seria um "{" (abre chaves)? Meu retorno JSON: Código: {"multicast_id":4843864103390316820,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1457983611784970%431fdc73f9fd7ecd"}]} Se puderem ajudar, agradeço, realmente não entendo o que esta errado.
Segui o help sim do progress, porém, não faz sentido o erro que o mesmo esta me apresentando: "Erro de parsing de JSON: esperado brace, mas localizado {. (15358)". Segui fielmente o que o help do progress faz, o source-type que estou usando é long-char. Por acaso teriam alguma sugestão melhor?
Olá Erick, Não tenho muita experiência com com JSON, e pelo que pude avaliar, a importação automática igual você esta fazendo não vai funcionar sem que você faça alguns ajustes. Primeiro o JSON que você tem são duas tabelas, a primeira que estou chamando de "ttretorno" e precisa ser tratada manualmente, e a outra "filha" chamada "results", então seria necessário importar em um DataSet. Partindo da sua variável de retorno que gravei em um arquivo para não precisar tratar todos os caracteres, montei o código abaixo que vai auxiliar você na solução definitiva. PHP: DEFINE VARIABLE cSourceType AS CHARACTER NO-UNDO.DEFINE VARIABLE cReadMode AS CHARACTER NO-UNDO INITIAL "EMPTY".DEFINE VARIABLE cFile AS CHARACTER NO-UNDO.DEFINE VARIABLE lRetOK AS LOGICAL NO-UNDO.DEFINE VARIABLE hDSet AS HANDLE NO-UNDO.DEFINE VARIABLE httRetorno AS HANDLE NO-UNDO.DEFINE VARIABLE hresults AS HANDLE NO-UNDO.DEFINE VARIABLE strRET AS LONGCHAR NO-UNDO.DEFINE TEMP-TABLE ttRetorno NO-UNDO FIELD multicast_id AS INT64 FIELD success AS INTEGER FIELD failure AS INTEGER FIELD canonical_ids AS INTEGER.DEFINE TEMP-TABLE results NO-UNDO FIELD message_id AS CHARACTER.ASSIGN cSourceType = "LONGCHAR" cReadMode = "empty"./* Carregando retorno de exemplo */COPY-LOB FROM FILE "C:\TEMP\dset.json" TO strRet.ASSIGN strRet = '~{"ProDataSet":~{"ttretorno":~[' + strRet + "~]~}~}".ASSIGN httRetorno = BUFFER ttRetorno:HANDLE hResults = BUFFER results:HANDLE.CREATE DATASET hDSet.hDset:SET-BUFFERS(httRetorno,hRESULTs).hDSet:ADD-RELATION(httRetorno,hResults,"multicast_id,multicast_id",FALSE,TRUE) NO-ERROR.lRetOK = hDSet:READ-JSON(cSourceType, strRet, cReadMode).MESSAGE "lRetOK" lRetOK VIEW-AS ALERT-BOX INFO BUTTONS OK.FOR EACH ttRetorno: DISP ttRetorno.END.FOR EACH results: DISP results.END. Espero que ajude.