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

 
Виктор Василюк:
Was sollen wir jetzt tun? Gibt es eine andere Möglichkeit, das Problem zu lösen?
Suchen Sie nicht nach einer Einheitslösung, die für alle gilt. Suchen Sie nach einer anderen Lösung für jedes Problem.
 
Виктор Василюк:

Vielen Dank für die Lib, aber es gibt einige Probleme.

Ich kann nicht herausfinden, wie ich ein Array mit der Bibliothek kleben kann?

Zum Beispiel gibt es

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

Die Probleme entstehen auf der Ebene der Deklaration einer Variablen vom Typ CJAVal. Die Verwendung von CJAVal primer(jtARRAY, a); ist nicht hilfreich.


Könnten Sie bitte die Beispieldatei ????? ergänzen oder erweitern?


Grüße Victor,

vielen Dank für Ihre Bemerkung. Ja, in der Tat, die Bibliotheksversion hat keine Funktion, um Array-Elemente explizit hinzuzufügen.

Die Bibliothek ist aktualisiert worden.

Die Version 1.03 wird nach der Überprüfung in der Codebase verfügbar sein.

Sie können die Version 1.03, die dem Beitrag angehängt ist, jetzt herunterladen.


Arbeitsbeispiel für ein Array:

  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


Dateien:
JAson.mqh  16 kb
 

Alexey, ich danke dir für deine Arbeit! Eine sehr notwendige Bibliothek!!!

Ich habe eine solche praktische Aufgabe.

Es gibt 1 CJAVal-Objekt vom Typ Datenbank. Und es gibt 2 CJAVal-Objekte vom Typ Auftragseigenschaften.

Ich möchte, dass die Datenbank Daten über diese Aufträge enthält.

Ungefähr so:

//--- Objekte
   CJAVal jv_database, // DB
   jv_order_1,         // Bestellung 1
   jv_order_2;         // Haftbefehl 2
//--- DB
   jv_database["Result"]="Success";
   jv_database["ErrorMessage"]="No error";
   // jv_database["Response"][2]={jv_order_1,jv_order_2}; // WANTED.
//--- Bestellung 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";
//--- Haftbefehl  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";

Ich möchte, dass das Feld Response ein Array von Auftragseigenschaften ist.

Und dass ein solcher Datensatz jv_database["Response"][idx] einen Zeiger oder das Auftragsobjekt selbst zurückgeben sollte.

Bitte beraten. Vielen Dank

 
Dennis Kirichenko:
Und dass ein solcher Datensatz jv_database["Response"][idx] einen Zeiger oder das Auftragsobjekt selbst zurückgeben sollte.

Verstehe ich das richtig, dass wir über den Verweis durch einen numerischen Index sprechen? Sollte ein Zeiger auf ein Objekt aus dem DB["Response"]-Array bei Index [idx] zurückgegeben werden?

Ich denke, Sie können.

---

aber die Initialisierung durch den Typ {x1, x2} - kann wahrscheinlich nicht gemacht werden. Soweit ich mich erinnere, ist diese Art der Initialisierung nur im Moment der Variablendeklaration möglich, d.h. als eine Art Konstruktor. Aber nicht als eine Form des Setzens von Werten in dem erstellten Array.

Deshalb müssen Sie es auf diese Weise tun:

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

Verstehe ich richtig, dass wir über die Behandlung nach numerischem Index sprechen? Sollte ein Zeiger auf ein Objekt aus dem DB["Response"]-Array über den Index [idx] zurückgegeben werden?

Ich denke, das kann man.

Ja, das ist richtig.
 

Eine andere Frage. Es gibt ein Objekt mit Aufträgen:

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

Die Quellzeile, aus der wir lesen, enthält Informationen über mehrere Aufträge. Es ist im Voraus nicht bekannt, wie viele davon es gibt.

Wie kann ich alle Informationen aus der Zeichenkette lesen, ohne die Größe des Auftragsobjekts festzulegen?

 

Von welcher Linie sprechen wir?

 
o_O:

Über welche Zeichenfolge sprechen wir?

Eine Zeichenkette mit Daten aus der Datenbank für alle Bestellungen (vom Server).
 

Falsche Antwort.)

Ich muss genau sehen, was Sie parsen wollen, ist es json mit einem Array oder sind Sie machen Ihre eigenen. Es ist schwer zu erraten.

 

Das ist die Art von Schnur:

{
     "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
    }
}