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

 
Виктор Василюк:
O que faremos agora? Há alguma outra maneira de resolver isso?
Não procure uma solução única para todos os problemas. Procure uma solução diferente para cada problema.
 
Виктор Василюк:

Obrigado pela biblioteca, mas há alguns problemas.

Não consigo descobrir como posso colar uma matriz usando a biblioteca.

Por exemplo, há

string a[] = {"1", "2", "3"};
int b[] = {1, 2, 3};
double c[] = {1.1, 2.9, 3.03};

Os problemas surgem no nível de declaração de uma variável do tipo CJAVal. Usar CJAVal primer(jtARRAY, a); não ajuda.


Você poderia complementar ou expandir o arquivo de exemplos ?????


Saudações, Victor,

Obrigado por sua observação. Sim, de fato, a versão da biblioteca não tem uma função para adicionar elementos de matriz explicitamente.

A biblioteca foi atualizada.

A versão 1.03 estará disponível no Codebase após a verificação.

Por enquanto, você pode fazer o download da versão 1.03 anexada à postagem.


Exemplo de trabalho para uma matriz:

  string a[] = {"1", "2", "3"};
  int b[] = {1, 2, 3};
  double c[] = {1.1, 2.9, 3.03};

  CJAVal js;
  js["a"].Add(a[0]);
  js["a"].Add(a[1]);
  js["a"].Add(a[2]);
        
  js["b"].Add(b[0]);
  js["b"].Add(b[1]);
  js["b"].Add(b[2]);

  js["c"].Add(c[0]);
  js["c"].Add(c[1]);
  js["c"].Add(c[2]);

  string t=js.Serialize();
  Print(t);   // Вывод   {"a":["1","2","3"],"b":[1,2,3],"c":[1.10000000,2.90000000,3.03000000]}        
  js.Clear();
  js.Deserialize(t);
        
  Print(js["a"].m_e[2].ToStr()); // Вывод   3


Arquivos anexados:
JAson.mqh  16 kb
 

Alexey, obrigado por seu trabalho! Biblioteca muito necessária!!!

Tenho uma tarefa prática.

Há 1 objeto CJAVal do tipo banco de dados. E há 2 objetos CJAVal do tipo propriedades de pedido.

Quero que o banco de dados contenha dados sobre esses pedidos.

Mais ou menos assim:

//--- objetos
   CJAVal jv_database, // DB
   jv_order_1,         // ordem 1
   jv_order_2;         // garantia 2
//--- DB
   jv_database["Result"]="Success";
   jv_database["ErrorMessage"]="No error";
   // jv_database["Response"][2]={jv_order_1,jv_order_2}; // WANTED.
//--- ordem 1
   jv_order_1["symbol"]="EURUSD";
   jv_order_1["ticket"]="1505254";
   jv_order_1["open_price"]="1.1065";
   jv_order_1["open_time"]="19.09.2016 11:53:31";
//--- mandado  2
   jv_order_2["symbol"]="USDJPY";
   jv_order_2["ticket"]="1505321";
   jv_order_2["open_price"]="100.02";
   jv_order_2["open_time"]="20.09.2016 14:12:53";

Gostaria que o campo Response fosse uma matriz de propriedades do pedido.

E que esse registro jv_database["Response"][idx] retorne um ponteiro ou o próprio objeto do pedido.

Por favor, me avise. Muito obrigado

 
Dennis Kirichenko:
E que esse registro jv_database["Response"][idx] deve retornar um ponteiro ou o próprio objeto do pedido.

Entendi corretamente que estamos falando sobre a referência por índice numérico? Um ponteiro para um objeto da matriz DB["Response"] deve ser retornado no índice [idx]?

Acho que sim.

---

mas a inicialização por tipo {x1, x2} - provavelmente não pode ser feita. Pelo que me lembro, esse tipo de inicialização está disponível somente no momento da declaração da variável, ou seja, como uma forma de construtor. Mas não como uma forma de definir valores na matriz criada.

É por isso que você terá de fazer isso dessa forma:

jv_database["Response"][0]=jv_order_1;
jv_database["Response"][1]=jv_order_2;
 
o_O:

Entendi corretamente que estamos falando de manipulação por índice numérico? Um ponteiro para um objeto da matriz DB["Response"] deve ser retornado pelo índice [idx]?

Acho que sim.

Sim, é isso mesmo.
 

Outra pergunta. Há um objeto de ordens:

CJAVal order;
order["symbol"];
order["type"];
order["lot"];
order["price_open"];
order["price_close"];
order["stop_loss"];
order["take_profit"];

A linha de origem da qual lemos contém informações sobre várias ordens. Não se sabe de antemão quantas delas existem.

Como posso ler todas as informações da string sem especificar o tamanho do objeto de pedido ?

 

De que linha estamos falando?

 
o_O:

De que string estamos falando?

Uma string que contém dados do banco de dados para todos os pedidos (do servidor).
 

Resposta errada).

Preciso ver exatamente o que você deseja analisar, se é json com uma matriz ou se você está inventando o seu próprio. É difícil adivinhar.

 

Esse é o tipo de fio:

{
     "symbol": "USDJPY",
     "type": "Buy",
     "lot": 0.5,
     "price_open": 102.36,
     "price_close": 102.44,
     "stop_loss": 99.25,
     "take_profit": 103.25 
    },
    {
     "symbol": "EURUSD",
     "type": "Sell",
     "lot": 0.2,
     "price_open": 1.1044,
     "price_close": 1.1252,
     "stop_loss": 1.1434,
     "take_profit": 1.0922
    }
}