Bibliotecas: Serialização e desserialização de JSON (MQL nativo) - página 11

 
o_o:

Como assim? Você mesmo criou essas profundidades de matriz.

Eu fiz? - Não, minha imaginação não vai tão longe, mas esse é um exemplo concreto da vida, por assim dizer.

Eu quis dizer que não podemos dispensar ponteiros e construções inteligentes? Eu gostaria de manter as coisas simples (modestamente, manterei silêncio sobre o código da biblioteca em si).

 
Andrey Dik:

Eu fiz isso? - Não, minha imaginação não vai tão longe, mas esse é um exemplo concreto da vida, por assim dizer.

Eu quis dizer que você não pode passar sem ponteiros e construções inteligentes?

O que você quer fazer sem ponteiros? O que exatamente você quer? Um pedaço de json no registro? Um botão "want money"?

 
o_o:

O que exatamente você precisa? Um pedaço de json no registro? Um botão "quero dinheiro"?

É disso que se trata:

CJAVal* j1=GetPointer(js.m_e[i].m_e[i1]);

Como você pode adivinhar, sem conhecer o código da biblioteca, o que é e por que deve ser feito para obter o que você deseja?

Pelo que vejo, não sou o único que é tão "sem noção".

ss. por exemplo, m_e - o que é essa coisa minúscula? ela não poderia se chamar, por exemplo, group? ou m_key? - Bem, não é nada além de groupName! É muito mais letras? - Não, mas é muito mais claro.

Resumindo: a biblioteca é muito poderosa e faz maravilhas, mas está escrita em uma "linguagem seca" e é melhor não olhar o código para os fracos de coração, mulheres que amamentam e crianças....

 
Andrey Dik:

É disso que se trata:

como é possível adivinhar, sem conhecer o código da biblioteca, o que é e por que deve ser feito para obter o que se deseja? deveria haver funções como ToDbl() para acesso simples aos dados.

Pelo que vejo, não sou o único que é tão "sem noção".

ss. por exemplo, m_e - o que é essa coisa minúscula? ela não poderia se chamar, por exemplo, group? ou m_key? - Bem, não é nada além de groupName! É muito mais letras? - Não, mas é muito mais claro.

Resumindo: a biblioteca é muito poderosa e faz maravilhas, mas está escrita em uma "linguagem seca" e é melhor não olhar o código para os fracos de coração, mulheres que amamentam e crianças....

Talvez você deva tentar outra biblioteca?

Eu costumava usá-la antes, mas ela não compilava na MQL5 (versão antiga).... você precisa adaptá-la... ou tentar uma nova versão...

http://www.lordy.co.nf/mql4/

Havia algum lugar no fórum sobre isso...

---------------------

aqui está...

https://www.mql5.com/en/code/11134

 
Andrey Dik:

É disso que se trata:

como é possível adivinhar, sem conhecer o código da biblioteca, o que é e por que deve ser feito para obter o que se deseja? deveria haver funções como ToDbl() para acesso simples aos dados.

Pelo que vejo, não sou o único que é tão "sem noção".

ss. por exemplo, m_e - o que é essa coisa minúscula? ela não poderia se chamar, por exemplo, group? ou m_key? - Bem, não é nada além de groupName! É muito mais letras? - Não, mas é muito mais claro.

Resumindo: a biblioteca é muito poderosa e faz maravilhas, mas está escrita em uma "linguagem seca" e é melhor não olhar o código para os fracos de coração, mulheres que amamentam e crianças....

Então, quem o forçou a entrar no array m_e?

Não sei o que você quer do código. E não sei que tipo de tarefa você está desenvolvendo.

---

Em primeiro lugar, json é um formato de transferência de dados, estrutura. Se você não entende a estrutura dos dados recebidos, o problema não é das minhas classes, é seu. Vá para a documentação de sua fonte de dados e procure entender isso

Em segundo lugar, a classe implementa as funções básicas de trabalho com o formato: serialização, armazenamento da estrutura e manuseio conveniente

Se você quisesse obter dados de uma determinada matriz, escreveria um código conveniente.

Print( js["фирма1"]["модельный_ряд1"][0][0].TODbl() );

e não aquela besteira demorada na forma de loops para recuperar toda a estrutura. Não sei do que se trata.

 
Delta.800:

talvez você deva tentar uma biblioteca diferente.

Eu costumava usá-la antes, mas ela não compilava na MQL5 para mim (versão antiga)... você precisa adaptá-la... ou tentar uma nova versão...

http://www.lordy.co.nf/mql4/

havia algum lugar no fórum sobre isso....

---------------------

aqui está...

https://www.mql5.com/en/code/11134

Obrigado, mas confio totalmente no código de Sergeyev.

Eu fui estúpido com os ponteiros, é claro, peço desculpas. Difícil de ler - fii, que problema...

 

o_o:

Print( js["фирма1"]["модельный_ряд1"][0][0].TODbl() );

e não aquela besteira longa na forma de loops em toda a estrutura. Não sei do que se trata.

Por nome de grupo, os dados podem não existir, ou o grupo não está completo, ou o nome do grupo não está nos dados, ou qualquer outra coisa... como então?

Dessa forma, fica mais fácil e mais claro, e você sempre pode verificar o tamanho das matrizes para não ter problemas com o preenchimento das estruturas:

js.group [счетчикФирм].group [счетчикМодельногоРяда].group [счетчикМоделей].group [счетчикМодельВизОбъем].ToDbl ());

 

em tais variantes, não está claro o que fazer com um elemento inexistente

como este

js["фирма1"]["модельный_ряд1"][0][0].TODbl()

Desta forma

js.group [countFirms].group [countModelRow].group [countModels].group [countModelVolume].ToDbl ());


se js["firm1"] ou js.group [counterFirms] não aparecer, o que produzir? e se deve produzir alguma coisa?

nesse ponto, o elemento nulo será acessado e ocorrerá um erro....

 
o_o:

em tais variantes, não está claro o que fazer com um elemento inexistente

como este

js["фирма1"]["модельный_ряд1"][0][0].TODbl()

desta forma

js.group [countFirms].group [countModelRow].group [countModels].group [countModelVolume].ToDbl ());


Se js["firm1"] ou js.group [counterFirms] não aparecer, o que produzir? e se deve produzir alguma coisa?

nesse ponto, haverá uma referência a um elemento nulo e um erro...

Há prateleiras em uma loja, para cada gênero e autor há uma prateleira e prateleiras diferentes (estruturas com as quais o programa trabalha). E há livros (dados) que podem ou não chegar à loja.....

E o que fazer, toda vez que for necessário redesenhar as prateleiras para uma nova chegada de livros? Não, claro que não.

Para abordar dessa forma:

js["фирма1"]["модельный_ряд1"][0][0].TODbl()

você precisa saber o nome do grupo, e se o grupo nos dados de entrada estiver lá, mas o nome não estiver lá? E se ..... muitas coisas podem acontecer...

É mais fácil verificar o tamanho dos grupos de dados e o número deles, e isso é tudo. Se pelo menos um tamanho não coincidir com nossas estruturas, isso significa que os dados estão quebrados e não faz sentido mexer neles para descobrir o que exatamente está quebrado, basta ignorar o pacote desses dados e pronto. Não há problemas com o acesso a células de matriz inexistentes (ou vazias) e não há incerteza sobre a exatidão dos dados recebidos. E o programa nunca travará por algum motivo.

[Excluído]  

Alguém ou o autor poderia responder se isso é compatível com JSON aninhado? Ou seja, uma instância CJAVal contém as chaves '2' e '3', que são outra instância CJAVal. O código parece ser executado, mas quando serializado, as chaves ficam em branco.

Por exemplo, estou recebendo:

{"":{"sl":5270.98000000,"tp":5285.26000000,"order":2},"":{"sl":5274.80000000,"tp":5289.06000000,"order":3}}

Mas deveria estar recebendo

{"2":{"sl":5270.98000000,"tp":5285.26000000,"order":2},"3":{"sl":5274.80000000,"tp":5289.06000000,"order":3}}