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

 
JAval j1; j1.Add(1);

JAval j2; j2.Add(2); j2.Add(3);

JAval js;

js["a"].Add(j1);
js["a"].Add(j2);


// auf dem Auspuff - { a: [ [1], [2,3] ]; }
 
o_o:

Es scheint klar zu sein, aber ich kann etwas nicht verstehen... Zum Beispiel eine einfache praktische Aufgabe: Wir kopieren die Charts und erstellen ein Array von Arrays mit jeweils 3 Charts mit den Feldern "Symbol" und"Periode".

Das heißt, als Ergebnis sollten wir folgendes erhalten: { "keyboard": [ [ [{"symbol":USDJPY, "period":5},{"symbol":AUDUSD, "period":5},{"symbol":EURUSD, "period":5}], [{"symbol":GBPUSD, "period":5},{"symbol":NZDUSD, "period":5},{"symbol":EURJPY, "period":5}] } ] }

Die Anzahl der Elemente in dem verschachtelten Array kann über eine Variable konfiguriert werden.

 
JAval ja, je, js;

je["symbol"]="USDJPY"; je["period"]=5; ja.Add(je);
je["symbol"]="AUDUSD"; je["period"]=5; ja.Add(je);
je["symbol"]="EURUSD"; je["period"]=5; ja.Add(je);

js["keyboard"].Add(ja);

ja.Clear();
je["symbol"]="GBPUSD"; je["period"]=5; ja.Add(je);
je["symbol"]="NZDUSD"; je["period"]=5; ja.Add(je);
je["symbol"]="EURJPY"; je["period"]=5; ja.Add(je);

js["keyboard"].Add(ja);


Sind Sie wirklich im Unklaren oder einfach zu faul, um selbst zu programmieren? )

 
o_o:


Sind Sie wirklich im Unklaren oder einfach zu faul, um selbst zu programmieren? )


Nein, Alexey, ich bin nicht zu faul zum Programmieren. Der Punkt ist ein anderer: Alle Ihre Beispiele haben eine feste Anzahl von Array-Elementen. Hier ist mein Code, der leider nicht funktioniert. Ich kann nicht verstehen, was der Fehler ist. (((

   CJAVal j_keyboard; // Hauptfeld
   CJAVal j_array;    // Verschachteltes Array 
   CJAVal j_item;     // Array-Element 

   //--- Bestimmen Sie die Anzahl der übertragenen Elemente
   int count = ArraySize(array_value);
   if(count == 0) return(j_keyboard.Serialize()); // Keine Elemente

   int col = 0;
   for(int item = 0; item<count; item++)
      {
         //--- Füllen des einfachsten Elements
         j_item["text"] = array_value[item];
         
         if(col<columns) // Wenn die Anzahl kleiner als die angegebenen Spalten ist, zum Array hinzufügen
            {
               j_array.Add(j_item);
            }
         else
            {   
               
               // Erreichen Sie die angegebene Anzahl von Spalten, fügen Sie sie dem Hauptarray hinzu
               j_keyboard["keyboard"].Add(j_array);
               col = 0;
               j_array.Clear(); // Verschachteltes Array löschen
            }
      }
   
   Print(j_keyboard.Serialize());
array_value - Это строчный массив переданных элементов
 
Алексей Барбашин:

Hier ist mein Code, der leider nicht funktioniert.

Wie haben Sie festgestellt, dass er nicht funktioniert?

 
o_o:

Wie haben Sie festgestellt, dass es nicht funktioniert?


Die Serialisierungszeichenfolge gibt ein leeres Objekt aus. Ich werde ein Skript erstellen und es hier hochladen.

.... nach einer Weile...

Alexey, es tut mir leid, ich habe es vermasselt... Ich habe das Iterator-Inkrement nicht hinzugefügt... (((

Alles funktioniert. Das ist es, was es bedeutet, mit einer intelligenten Person zu chatten! ))) Nochmals vielen Dank für Ihre Entwicklung, die ich nun schon seit fast einem Jahr verwende!

Dateien:
 
Алексей Барбашин:

Die Serialisierungszeichenfolge gibt ein leeres Objekt aus. Ich werde ein Skript zusammenstellen und es hier posten.

Bei mir funktioniert es.

#include <JAson.mqh>
//------------------------------------------------------------------ OnStart
void OnStart()
{
        string array_value[]={"000", "111", "012", "AAA", "BBB", "ABC"};
        Print(Get(array_value, 3));
}
//------------------------------------------------------------------ Get
string Get(string& array_value[], int columns)
{       
        CJAVal jk; // Hauptfeld
        int n=ArraySize(array_value); if (n==0) return jk.Serialize(); // Keine Elemente
        
        CJAVal ja;    // Verschachteltes Array 
        for(int i=0, c=0; i<n; i++, c++)
        {
                if (c>=columns) { jk["keyboard"].Add(ja); c=0; ja.Clear(); }
                CJAVal ji; ji["text"]=array_value[i]; ja.Add(ji); // hinzufügen
        }
        if (ArraySize(ja.m_e)>0) jk["keyboard"].Add(ja);
        
        return jk.Serialize();
}

{"keyboard":[[{"text":"000"},{"text":"111"},{"text":"012"}],[{"text":"AAA"},{"text":"BBB"},{"text":"ABC"}]]}


Was stimmt mit Ihrem Code nicht?

 
o_o:

Bei mir funktioniert es.


Was ist mit Ihrem Code falsch?


Antwort oben: Ich habe meinen Fehler gefunden. Vielen Dank dafür! )))

 

Алексей Барбашин:

Es klappt. Das ist es, was es bedeutet, einfach mit einem intelligenten Menschen zu plaudern! )))

Es gibt ein Debug für alles. Es ist viel schlauer ))

Nochmals vielen Dank für Ihre Entwicklung, die ich nun schon seit fast einem Jahr benutze!

gern geschehen

 

das WebRequest-Ergebnis ist ein Array. und ich rufe wie folgt auf

jv.Deserialize( Ergebnis);


Wie kann ich es iterieren?