Pessoal, preciso de uma ajuda.
Já pesquisei quase todos os links e referencias, tentei varias opções porém não estou conseguindo ler o retorno do JSON da minha chamada Webrequest.
A chamada está retornando o seguinte:
dados :{"message":[{"MOEDA":"EURUSD","TIMEFRAME":15,"SWAPATIVO":0,"SWAPMOEDA":1,"ALERTA":"True","EA_MAGICO":201900059298,"IDENTIFICADOR_ROB":"EURUSD-15-2.15","ESPERA":500,"META":1000,"PARA":1000,"VALORCORRETAGEM":0,"LOTES":"0.01","AUMENTO1":"True","AUMENTO2":"True","AUMENTO3":"True","AUMENTO4":"False","AUMENTO5":"False","LOTES1":"0.03","LOTES2":"0.05","LOTES3":"0.08","LOTES4":0,"LOTES5":0,"controlaSLTPnaordem ":"True","aumentonapedra ":"True","operasoembarra ":"True","naooperamaxmin ":"false","distanciamaxmin ":15,"retiraaumento ":"false","valoresponto ":"true","filtraspread ":"true","spreadmaximo ":10,"afastamento_pontos ":108,"TPR_pontos ":50,"TPRaumento_pontos ":50,"SLR_pontos ":500,"distanciaaumento1_pontos ":100,"distanciaaumento2_pontos ":100,"distanciaaumento3_pontos ":75,"distanciaaumento4_pontos ":0,"distanciaaumento5_pontos ":0,"afastamento_per ":0,"TPR_per ":0,"TPRaumento_per ":0,"SLR_per ":0,"distanciaaumento1_per ":0,"distanciaaumento2_per ":0,"distanciaaumento3_per ":0,"distanciaaumento4_per ":0,"distanciaaumento5_per ":0,"horainicio ":2,"minutoinicio ":0,"horalimite ":20,"minutolimite ":30,"horaencerra ":23,"minutoencerra ":40,"janela1 ":"false","horainiciojanela1 ":0,"minutoiniciojanela1 ":0,"horafimjanela1 ":0,"minutofimjanela1 ":0,"janela2 ":"false","horainiciojanela2 ":0,"minutoiniciojanela2 ":0,"horafimjanela2 ":0,"minutofimjanela2 ":0,"media11 ":7,"media22":15,"validanoticia ":"true","fuso ":0,"toleranciaindicador1 ":30,"toleranciaindicador2 ":45,"fechaoperacaonoticia ":"false","toleranciaindicador11 ":5,"swapmoeda1 ":3,"swapmoeda2":5,"swapmoeda3":10,"swapmoeda4":0,"swapimportancia ":3,"habilitaADX ":"false","ADX ":7,"VADX1 ":100,"DI_PLUS ":"1.5","DI_MINUS ":"1.5","habilitaATR ":"false","ATR ":7,"ATRMINVENDA ":0,"ATRMAXCOMPRA ":0,"maximocontratos ":"0.34","sotexto ":"true","filtro1":0,"filtro2":0,"filtro3":0,"filtro4":0,"filtro5":0,"filtro6":0,"filtro7":0,"filtro8":0,"filtro9":0,"filtro10":0}]}
o código está abaixo, porém quando dou o print da variável que quero pegar (avaixo MOEDA), ele retorna em branco. para qualquer campo do Json vem assim. alguem tem uma luz?
os includes são:
#include <JAson.mqh>;
#include <json.mqh>;
#include <hash.mqh>;
#include <Arrays\ArrayObj.mqh>;
res=WebRequest("POST",uri,NULL,NULL, 5000, post, ArraySize(post),result, result_header);
ulong dados;
dados = CharArrayToString(result,0,-1);
if(res==-1)
{
Print("Error code =",GetLastError());
MessageBox("Add address '"+uri+"' in Expert Advisors tab of the Options window","Error",MB_ICONINFORMATION);
}
else
{
//--- successful
if (res==200)
{
ulong strRes="";
strRes=CharArrayToString(result,CP_ACP);
CJAVal dataM;
dataM.Deserialize(strRes);
string stat=dataM["MOEDA"].ToStr();
Print(stat);
}
Print("REST client's POST: ",signal);
Print("Server response: ",CharArrayToString(result,0,-1));
;
}
Desculpe a franqueza mas só quem usou ou usa essas LIBs irá poder te ajudar. Inclusive não sei porque você esta'usando 2 LIBs de JSON ao mesmo tempo, o que aumenta ainda mais a dificuldade de tentar interpretar qualquer coisa.
Sugiro você entrar em contato com o autor das LIBs...
Independente do seu código postado, eu nem me vou dar ao trabalho de analisar as 3 LIBs que vc está usando para te dar a solução... Aí entra uma extensiva Lição de Casa que você mesmo deve fazer...
Interpretar JSON é mil vezes mais produtivo, seguro e fácil do que XML... Só que vc precisa saber o que você está fazendo...
;)
Utilizo WebRequest e funciona.
Ex:
#include <JAson.mqh>
CJAVal content;
// resultServer = Resposta do servidor em JSON
WebRequest(method, url, headers, timeout, data, resultServer, resultServerHeaders);
content.Deserialize(resultServer);
Print(content["message"].ToStr());
Ola! Acho que para pegar um json vc deve usar o methodo GET em vez de POST!
Analisando melhor o problema... Sim da pra pegar tanto com GET como pelo POST. Ao meu ver o você deve pegar primeiro o json da key "message" depois de moeda, seja descer mais um nivel do array.
Exemplo:
string stat = dataM["Message"][0] .ToStr() ;
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Pessoal, preciso de uma ajuda.
Já pesquisei quase todos os links e referencias, tentei varias opções porém não estou conseguindo ler o retorno do JSON da minha chamada Webrequest.
A chamada está retornando o seguinte:
dados :{"message":[{"MOEDA":"EURUSD","TIMEFRAME":15,"SWAPATIVO":0,"SWAPMOEDA":1,"ALERTA":"True","EA_MAGICO":201900059298,"IDENTIFICADOR_ROB":"EURUSD-15-2.15","ESPERA":500,"META":1000,"PARA":1000,"VALORCORRETAGEM":0,"LOTES":"0.01","AUMENTO1":"True","AUMENTO2":"True","AUMENTO3":"True","AUMENTO4":"False","AUMENTO5":"False","LOTES1":"0.03","LOTES2":"0.05","LOTES3":"0.08","LOTES4":0,"LOTES5":0,"controlaSLTPnaordem ":"True","aumentonapedra ":"True","operasoembarra ":"True","naooperamaxmin ":"false","distanciamaxmin ":15,"retiraaumento ":"false","valoresponto ":"true","filtraspread ":"true","spreadmaximo ":10,"afastamento_pontos ":108,"TPR_pontos ":50,"TPRaumento_pontos ":50,"SLR_pontos ":500,"distanciaaumento1_pontos ":100,"distanciaaumento2_pontos ":100,"distanciaaumento3_pontos ":75,"distanciaaumento4_pontos ":0,"distanciaaumento5_pontos ":0,"afastamento_per ":0,"TPR_per ":0,"TPRaumento_per ":0,"SLR_per ":0,"distanciaaumento1_per ":0,"distanciaaumento2_per ":0,"distanciaaumento3_per ":0,"distanciaaumento4_per ":0,"distanciaaumento5_per ":0,"horainicio ":2,"minutoinicio ":0,"horalimite ":20,"minutolimite ":30,"horaencerra ":23,"minutoencerra ":40,"janela1 ":"false","horainiciojanela1 ":0,"minutoiniciojanela1 ":0,"horafimjanela1 ":0,"minutofimjanela1 ":0,"janela2 ":"false","horainiciojanela2 ":0,"minutoiniciojanela2 ":0,"horafimjanela2 ":0,"minutofimjanela2 ":0,"media11 ":7,"media22":15,"validanoticia ":"true","fuso ":0,"toleranciaindicador1 ":30,"toleranciaindicador2 ":45,"fechaoperacaonoticia ":"false","toleranciaindicador11 ":5,"swapmoeda1 ":3,"swapmoeda2":5,"swapmoeda3":10,"swapmoeda4":0,"swapimportancia ":3,"habilitaADX ":"false","ADX ":7,"VADX1 ":100,"DI_PLUS ":"1.5","DI_MINUS ":"1.5","habilitaATR ":"false","ATR ":7,"ATRMINVENDA ":0,"ATRMAXCOMPRA ":0,"maximocontratos ":"0.34","sotexto ":"true","filtro1":0,"filtro2":0,"filtro3":0,"filtro4":0,"filtro5":0,"filtro6":0,"filtro7":0,"filtro8":0,"filtro9":0,"filtro10":0}]}
o código está abaixo, porém quando dou o print da variável que quero pegar (avaixo MOEDA), ele retorna em branco. para qualquer campo do Json vem assim. alguem tem uma luz?
os includes são:
#include <JAson.mqh>;
#include <json.mqh>;
#include <hash.mqh>;
#include <Arrays\ArrayObj.mqh>;
res=WebRequest("POST",uri,NULL,NULL, 5000, post, ArraySize(post),result, result_header);
ulong dados;
dados = CharArrayToString(result,0,-1);
if(res==-1)
{
Print("Error code =",GetLastError());
MessageBox("Add address '"+uri+"' in Expert Advisors tab of the Options window","Error",MB_ICONINFORMATION);
}
else
{
//--- successful
if (res==200)
{
ulong strRes="";
strRes=CharArrayToString(result,CP_ACP);
CJAVal dataM;
dataM.Deserialize(strRes);
string stat=dataM["MOEDA"].ToStr();
Print(stat);
}
Print("REST client's POST: ",signal);
Print("Server response: ",CharArrayToString(result,0,-1));
;
}