Bibliotheken: JSON Serialization and Deserialization (native MQL) - Seite 10

 

fest

1.13

Dateien:
JAson.mqh  31 kb
 
o_o:
Ja, ich habe wahrscheinlich nicht verstanden, was Ihr Problem war, die Zeilen, die Sie zeigten, dass Sie in der Lage, alles zu bekommen waren.
{
  "server_time": 1519120845,
  "pairs": {
    "btc_usd": {
      "decimal_places": 3,
      "min_price": 0.1,
      "max_price": 500000,
      "min_amount": 0.001,
      "hidden": 0,
      "fee": 0.2
    },
    "btc_rur": {
      ...
    },
    "btc_eur": {
      ...

Der Austausch gibt diese Antwort.... (und die Anzahl der Paare kann unterschiedlich sein... zum Beispiel, wenn die Börse einige Paare ausschaltet oder hinzufügt).

Ich muss irgendwie bekommen alle Namen der Paare in der Antwort (btc_usd, btc_rur, btc_eur, etc.) in einer Schleife oder durch einen rekursiven Aufruf, es spielt keine Rolle.... Ich kann nicht herausfinden, wie ich den ersten und den nächsten Namen eines Paares bekomme... Ich kann nicht herausfinden, wie ich den ersten und den nächsten Namen eines Paares ermitteln kann....

 
Delta.800:

die Börse gibt diese Antwort.... (und die Anzahl der Paare kann unterschiedlich sein.... zum Beispiel, wenn die Börse einige Paare ausschaltet oder hinzufügt).

Ich muss irgendwie bekommen alle Namen der Paare in der Antwort (btc_usd, btc_rur, btc_eur, etc.) in einer Schleife oder durch einen rekursiven Aufruf, es spielt keine Rolle.... Ich kann nicht herausfinden, wie ich den ersten und den nächsten Namen eines Paares bekomme... Ich kann nicht herausfinden, wie ich den ersten und den nächsten Namen eines Paares erhalte... Ich kann es nicht herausfinden....

Schneiden Sie die Zeichenfolge am Anfang ab

{
  "server_time": 1519120845,
  "pairs": 

Löschen Sie dann die } am Ende des Strings

Geben Sie die Zeichenkette dann an den Parser weiter.

Füllen Sie Ihre Struktur mit Parserdaten. Und dann machen Sie mit Ihrer Struktur, was Sie wollen - Namen von Paaren, usw.

 
Andrey Dik:

Schneiden Sie die Zeile ganz am Anfang

Dann am Ende der Zeile löschen }

Anschließend wird die Zeichenkette in den Parser eingegeben.

Füllen Sie Ihre Struktur mit Parserdaten. Und dann machen Sie mit Ihrer Struktur, was Sie wollen - Namen paaren usw.

"Dann füttern Sie den Parser mit der Zeichenkette." - Ist das richtig? dataM.Deserialize(ttt);

"Füllen Sie Ihre Struktur mit Parserdaten." - wie macht man das? bitte, geben Sie mir eine Zeile..... (Sie brauchen die Struktur nicht zu beschreiben))

ss Ich meinte eine einfache Struktur, nicht eine objektorientierte, wie z.B.

struct bpInfo
{
public:
        ulong server_time;
        bpPairInfo pairs[];
        
        bool FromJson(CJAVal& ja)
        {
                server_time=(uint)ja["server_time"].ToInt();
                CJAVal* jp=ja["pairs"];
                int n=ArrayResize(pairs, ArraySize(jp.m_e));
                for (int i=0; i<n; ++i) pairs[i].FromJson(jp.m_e[i]);
                return true;
        }
};
Ich glaube, es gibt hier etwas Ähnliches, aber ich kann es nicht herausfinden. (Ich bin nicht gut in OOP, noch nicht...).
 
o_o:

fest

1.13

Versuchen Sie dieses Beispiel:

#include "JAson.mqh"

//+------------------------------------------------------------------+
void OnStart ()
{
  string in, out;
  CJAVal js (NULL, jtUNDEF);
  bool b;

  //---
  in =  "{\"фирма1\":{\"модельный_ряд1\":[[0.1,1.3],[0.2,1.5],[0.3,2.0]],\"модельный_ряд2\":[[0.1,2.3],[0.2,2.5],[0.3,3.0]]},\"фирма2\":{\"модельный_ряд1\":[[0.2,3.8],[0.3,4.0],[0.4,4.5]],\"модельный_ряд2\":[[0.2,4.8],[0.3,5.0],[0.4,6.5]]}}}";
  Print(in);
  out = "";
  b = js.Deserialize (in);
  js.Serialize (out);
  Print (out);
  
  for (int i = 0; i < ArraySize (js.m_e); i++)
  {
    Print("---");
    Print(js.m_e[i].m_key);
    
    for (int i1 = 0; i1 < ArraySize (js.m_e [i].m_e); i1++)
    {
      Print("   : ", js.m_e[i].m_e[i1].m_key);
      
      for (int i2 = 0; i2 < ArraySize (js.m_e [i].m_e [i1]. m_e); i2++)
      {
        Print("      : ", js.m_e[i].m_e[i1].m_e[i2].m_key, " :", js.m_e[i].m_e[i1].m_e[i2].ToDbl());
      }
    }
  }
}
//+------------------------------------------------------------------+
 
Delta.800:

"Dann füttern Sie den Parser mit der Zeichenkette." - Ist das richtig? dataM.Deserialize(ttt);

"Füllen Sie Ihre Struktur mit Parserdaten." - wie macht man das? bitte, geben Sie mir eine Zeile..... (Sie brauchen die Struktur nicht zu beschreiben))

Schauen Sie sich mein Beispiel über Unternehmen und Modellreihen an - es zeigt, wie man Daten vom Parser erhält.....


o_o:

korrigiert

1.13

Jedoch..... zerlegt und sammelt das Timing perfekt, aber ich kann keine Daten bekommen..... vielleicht keine Tabellen, Ints, usw.? - Lassen Sie die Zeichenkette so, wie sie ist, in Form einer Zeichenkette und entscheiden Sie dann, wie Sie mit dieser Zeichenkette von außen umgehen.

 
Andrey Dik:

Jedoch..... Disassembliert und assembliert der Begriff ist großartig, aber ich kann die Daten nicht bekommen.... Vielleicht brauchen wir keine Tabellen, Ints, usw.? - Lassen Sie die Zeichenkette so, wie sie ist, in Form einer Zeichenkette und entscheiden Sie dann, wie Sie mit dieser Zeichenkette von außen umgehen.

Sie haben ein Array in einem Array. Das bedeutet, dass Sie eine weitere Schleifenebene i3 hinzufügen müssen.

модельный_ряд1 :[ [ 0.1,1.3], [ 0.2,1.5], [ 0.3,2.0] ]
#include <JAson.mqh>

//+------------------------------------------------------------------+
void OnStart ()
{
  string in, out;
  CJAVal js (NULL, jtUNDEF);
  bool b;

  //---
  in =  "{\"фирма1\":{\"модельный_ряд1\":[[0.1,1.3],[0.2,1.5],[0.3,2.0]],\"модельный_ряд2\":[[0.1,2.3],[0.2,2.5],[0.3,3.0]]},\"фирма2\":{\"модельный_ряд1\":[[0.2,3.8],[0.3,4.0],[0.4,4.5]],\"модельный_ряд2\":[[0.2,4.8],[0.3,5.0],[0.4,6.5]]}}}";
  Print(in);
  out = "";
  b = js.Deserialize (in);
  js.Serialize (out);
  Print (out);
  
  for (int i = 0; i < ArraySize (js.m_e); i++)
  {
    Print("---");
    Print(js.m_e[i].m_key);
    
    for (int i1 = 0; i1 < ArraySize (js.m_e [i].m_e); i1++)
    {
      CJAVal* j1=GetPointer(js.m_e[i].m_e[i1]);
      Print("   : ", j1.m_key);
      
      for (int i2 = 0; i2 < ArraySize (j1. m_e); i2++)
      {
        CJAVal* j2=GetPointer(j1.m_e[i2]);
        for (int i3 = 0; i3 < ArraySize (j2. m_e); i3++)
        {
           CJAVal* j3=GetPointer(j2.m_e[i3]);
           Print("         : ", j3.m_key, " :", j3.ToDbl());
        }
      }
    }
  }
}
 

Ein GROSSES DANKESCHÖN an alle, die geantwortet haben!!!!

{
  "server_time": 1519120845,
  "pairs": {
    "btc_usd": {
      "decimal_places": 3,
      "min_price": 0.1,
      "max_price": 500000,
      "min_amount": 0.001,
      "hidden": 0,
      "fee": 0.2
    },
    "btc_rur": {
      ...
    },
    "btc_eur": {
      ...

erhalten wir die Namen der Paare:

CJAVal dataM;
...
dataM.Deserialize(ttt);   
Print(dataM.m_e[0].m_key);
Print(dataM.m_e[1].m_key);
for (int i1 = 0; i1 < ArraySize (dataM.m_e [1].m_e); i1++)
  {
    CJAVal* j1=GetPointer(dataM.m_e[1].m_e[i1]);
    Print("   :-", j1.m_key);
  }

Unterm Strich:

server_time
pairs
:-btc_usd
:-btc_rur
:-btc_eur
:-ltc_btc
...

was wir brauchten!

 
o_o:

Sie haben ein Array in einem Array. Sie müssen also eine weitere Schleifenebene hinzufügen i3

Zauberei, Stufe 82.

Kannst du es nicht noch einfacher machen?

 
Andrey Dik:

Zauberei, Stufe 82.

Könnt ihr es nicht noch einfacher machen?

Was meinst du? Ihr habt doch die Felder so tief gemacht.