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

 

Bem, acontece que se trata apenas de uma matriz de objetos.

a aparência geral de "Array": [ {..}, {..}, ]

Ou seja, envolva essa lista em chaves.

"List": [ {"symbol": "USDJPY", "type": "Buy" },  { "symbol": "EURUSD", "type": "Sell" } ]
 

Eu o limitei com colchetes. Mas somente o primeiro objeto é lido:

[ {
     "symbol": "USDJPY",
     "type": "Buy",
     "lot": 0.5,
     "price_open": 102.36,
     "price_close": 102.44,
     "stop_loss": 99.25,
     "take_profit": 103.25 
    },
    {

Como ler em uma matriz?

 

Você fornece json válido para o analisador?

Tudo funciona com seus dados

  string in="{ \"array\": [ { \"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 } ] }";
  CJAVal js(NULL,jtUNDEF);
  js.Deserialize(in);
  string out="";
  js.Serialize(out);
  Print(out);
 
Alexei, muito obrigado! Esqueci de colocá-lo entre parênteses.....
 

Pergunta de um "burro".

Como posso obter o valor de uma chave sem recorrer ao método de pesquisa de chaves?

virtual CJAVal *CJAVal::FindKey(string akey) 
 
Dennis Kirichenko:

Pergunta de um "burro".

Como posso obter o valor de uma chave sem recorrer ao método findkey?

Somente conhecendo o caminho completo para a chave, mas o findkey será usado implicitamente.

double d=jo["order"]["profit"];

double d=ja["array"].m_e[0]["profit"];

---

caso contrário, acesse a matriz m_e diretamente, sabendo o índice exato.

 

Olá. Onde posso ler sobre todas as funções de sua biblioteca? Outro dia tive que resolver o problema de interagir com um dos recursos da Internet, cuja resposta é retornada no formato JSON. Sua biblioteca me ajudou a economizar tempo e a não ter que lidar com a análise de JSON, pelo que lhe agradeço muito! Mas eu gostaria de entender mais profundamente as funções da biblioteca. Não encontrei nenhuma descrição da função da biblioteca.

E mais uma pergunta: na resposta do serviço em um dos campos há uma pequena descrição em cirílico, mas o serviço JSON codifica esse texto da seguinte forma: "description": "\u041d\u043e\u0432\u043e\u0435\u0432\u0432\u0432\u0435\u0440\u0441\u0438\u0438 v.2\r\n1.\u0418\u0437\u043c\u0435\u043d\u0435\u043d \u0434\u0438\u0437\u0430\u0439\u043d \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438\r\n2.\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043c\u0438\u043d\u0438\u043f\u0430\u043d\u0435\u043b\u044c\r\n3.\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0430\u043b\u0430\u043d\u0441\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430\r\n4.\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438\r\n\r\n"

É possível traduzir esse texto para o formato necessário com a ajuda de sua biblioteca?

Desde já agradeço!

 

A libe tem apenas duas funções principais

Serialização e desserialização.

Todo o resto são operadores sobrecarregados, definição e leitura de arrays

---

esse texto escapado pode ser convertido.

Adicionarei a análise à função Unescape na próxima versão.

 

atualizado para a versão 1.05

O texto de seu exemplo será convertido para

{"description": "Novidades na versão v.2\r\n1.Painel de negociação redesenhado\r\n2.Adicionado mini painel\r\n3.Adicionada exibição de saldo para a conta de negociação selecionada\r\n4.Bugs corrigidos"}

---

Enquanto os administradores estiverem atualizando a base de código, você poderá fazer o download da base anexa.

Arquivos anexados:
jason.mqh  30 kb
 
o_O:

atualizado para a versão 1.05

O texto de seu exemplo será convertido para

{"description": "Novidades da versão v.2\r\n1.Painel de negociação redesenhado\r\n2.Adicionado mini painel\r\n3.Adicionada exibição de saldo para a conta de negociação selecionada\r\n4.Corrigidos alguns bugs"}

---

Enquanto os administradores estiverem atualizando a base de código, você poderá fazer o download da base anexa.

Muito obrigado! Portanto, agora posso remover o decodificador que já escrevi do Owl. Que tudo esteja em uma única biblioteca! Resposta muito rápida! Muito obrigado!