Bibliotecas: Serialização e desserialização de JSON (MQL nativo) - página 14
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
A biblioteca é muito útil. Mas percebi que, ao serializar valores do tipo double, há uma grande perda de precisão.
Exemplo:
double minutes_open[] = {0.95347, 0.95317, 0.95324}
for (int i=0; i<ArraySize(minutes_open); ++i) jv["minutes_open"].Add(minutes_open[i]);
Após a serialização, obtenho:
"minutes_open":[9.53e-01,9.53e-01,9.53e-01]
Ou seja, os dois últimos caracteres significativos são simplesmente perdidos e todos os valores da matriz se tornam simplesmente iguais uns aos outros. Como resultado, todos os cálculos baseados nesses dados são em vão....
No final, consegui contornar o problema convertendo os valores da matriz em string.
Olá!
A documentação da biblioteca JAson não está completa neste site. Escrevi a documentação com mais detalhes e adicionei testes unitários: https://github.com/vivazzi/JAson. Ela pode ser útil para alguém.
Além disso, criei um problema que contém a descrição do erro de uso do Json interno (objeto CJAVal): https://github.com/vivazzi/JAson/issues/1.
O objeto CJAVal não é atribuído corretamente a outro objeto CJAVal como objeto:
Como solução alternativa, é necessário usar o método Set():
Se alguém puder ajudar, muitos desenvolvedores de MQL ficarão gratos, pois esse erro já existe há muitos anos.
Olá a todos!!!
A documentação do JAson não está completa neste site, então escrevi uma documentação mais detalhada https://github.com/vivazzi/JAson/ e adicionei testes de unidade: talvez alguém ache útil.
E descrevi o problema de usar um Json aninhado (objeto CJAVal): https://github.com/vivazzi/JAson/issues/1.
O objeto CJAVal não é salvo corretamente se você usar o sinal "=" (a chave vazia é salva):
Sim, nos testes anexados na página da biblioteca neste site, você pode descobrir que precisa usar o método Set():
Mas se alguém puder corrigir a biblioteca para que seja possível salvar estruturas Json aninhadas por meio do sinal "=", isso ajudaria muitas pessoas. Como notei que algumas pessoas acham que a biblioteca tem erros quando tentam atribuir um CJAVal aninhado da maneira usual por meio de "=".
Espero que isso seja possível até mesmo na linguagem MQL. Eu mesmo tentei corrigir isso, mas não tenho um conhecimento profundo da linguagem MQL e, até agora, não funcionou a atribuição por meio de "=".
Olá!
A documentação da biblioteca JAson não está completa neste site. Escrevi a documentação com mais detalhes e adicionei testes unitários: https://github.com/vivazzi/JAson. Ela pode ser útil para alguém.
Além disso, criei um problema com a descrição do erro de uso do Json interno (objeto CJAVal): https://github.com/vivazzi/JAson/issues/1.
O objeto CJAVal não é atribuído corretamente a outro objeto CJAVal como objeto:
Como solução alternativa, você precisa usar o método Set():
Se alguém puder ajudar, muitos desenvolvedores de MQL ficarão gratos, pois esse bug já existe há muitos anos.
O problema é com o método Copy.
A chave é substituída pela chave do subobjeto; em seu exemplo, o "b" é substituído pela chave do "nested_data", que está vazio.
Usei esta solução simples, não totalmente testada:
Obrigado, Laszlo Tormasi - sua correção funciona e todos os testes foram aprovados!
Atualizei o JAson com suas correções: https://github.com/vivazzi/JAson
O problema de atribuir estruturas Json aninhadas por meio do sinal "=" foi resolvido por Laszlo Tormasi no comentário https://www.mql5.com/en/forum/65320/page3#comment_21453129.
Versão JAson com ediçõesem https://github.com/vivazzi/JAson.
Obrigado a todos que tentaram entender o problema e ajudar!
Foi corrigido um erro ("matriz fora do intervalo") que ocorria com índices de matriz negativos. Agora o operador [] retorna NULL.
O processamento tem a seguinte aparência.
Além disso, adicionei o método ToIntI por conveniência. Como ToInt retorna long.
Não entendo como ler o json aninhado.
Aqui está uma string como esta:
string str= { "key1": [ { "key2": [ { "key3": "val)" }, {}, {} ] } ] }Como faço para lê-la e acessar os elementos?
Não importa o quanto eu tente, não funciona.Não entendo como ler o json aninhado.
Aqui está uma string como esta:
Como faço para lê-la e acessar os elementos?
Não importa quantas vezes eu tente, não consigo.string str; CJAVal data; str= "{" " \"key1\": [" " {" " \"key2\": [" " {" " \"key3\": \"val)\"" " }," " {}," " {}" " ]" " }" " ]" "}"; data.Deserialize(str); Print(data["key1"][0]["key2"][0]["key3"].ToStr());Se você não entender a estrutura de sua cadeia de caracteres json ou se algo der errado, faça o seguinte:
Para entender facilmente a estrutura de uma cadeia de caracteres json, use este site: https: //jsoneditoronline.org/.