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

 
danielsokolowsk:

Würde jemand oder der Autor beantworten, wenn dies soll verschachtelte JSON unterstützen? Das heißt, eine CJAVal-Instanz enthält einen Schlüssel "2" und "3", die eine andere CJAVal-Instanz sind. Code scheint zu laufen, aber wenn serialisiert die Schlüssel sind leer.

Beispiel: Ich erhalte:


Aber eigentlich sollte ich

https://www.mql5.com/ru/forum/63015

ein paar Beispiele

   string a[] = {"1", "2", "3"};
   int b[] = {1, 2, 3};
   
   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"][0]=1.1;
   js["c"][1]=2.9;
   js["c"][2]=3.03;
   
   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["c"][2].ToStr()); // 3.03000000

Array von Arrays

JAval j1; j1.Add(1);

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

JAval js;

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

// { a: [ [1], [2,3] ]; }
Библиотеки: JSON Serialization and Deserialization (native MQL)
Библиотеки: JSON Serialization and Deserialization (native MQL)
  • 2015.08.18
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: JSON Serialization and Deserialization (native MQL)
 
Tolles Design, danke Bruder! Funktioniert wie ein Uhrwerk, verwendet es in meinem Roboter.
 
Konstantin Efremov:
Tolles Design, danke Bruder! Funktioniert wie ein Uhrwerk, verwendet es in meinem Roboter.

Es gibt einige Fehler in der Bibel. beigefügt ist die korrigierte Version, Dank an den Autor und wird wahrscheinlich nichts dagegen.

Dateien:
json.mqh  44 kb
 

Hallo,


Ich versuche, diese Bibliothek zu verwenden, um eine json-Datei zu lesen.


könnten Sie ein Beispiel in einem solchen Fall zur Verfügung stellen?


Meine ersten Zeilen sind:

   string s[];
   int cpt=0;
   
   int handle=FileOpen("json_sample.txt",FILE_READ|FILE_TXT|FILE_ANSI);
   while(!FileIsEnding(handle)) {ArrayResize(s,ArraySize(s)+1); s[cpt++]=FileReadString(handle);}
   FileClose(handle);


Was muss ich tun, um einige Werte aus der json-Datei in meinen Variablen zu speichern?


Vielen Dank für die Hilfe!

Erwann.

 

Nach einigen Recherchen habe ich mein Problem gelöst :)


Es ist nicht notwendig, die Stringtabelle [] zu verwenden, da die Länge von Strings auf 256 Bytes begrenzt ist.


Es gibt eigentlich keine Längenbegrenzung für Strings (nur für die Initialisierung zwischen Anführungszeichen "".

Sie müssen also nur diesen Code verwenden:

   CJAVal srce;
   
   string s;
   int cpt=0;
   
   int handle=FileOpen("json_sample.txt",FILE_READ|FILE_TXT|FILE_ANSI);
   while(!FileIsEnding(handle)) StringAdd(s,FileReadString(handle));
   FileClose(handle);
   
   srce.Deserialize(s);


die s String-Variable kann eine Länge von mehr als 256 Zeichen haben :)


Auf Wiedersehen,

Erwann.

 
danielsokolowsk:

Würde jemand oder der Autor beantworten, wenn dies soll verschachtelte JSON unterstützen? Das heißt, eine CJAVal-Instanz enthält einen Schlüssel "2" und "3", die eine andere CJAVal-Instanz sind. Code scheint zu laufen, aber wenn serialisiert die Schlüssel sind leer.

Beispiel: Ich erhalte:


Aber eigentlich sollte ich

Daniel, ich bin auch auf das Problem mit leeren Schlüsseln gestoßen, wenn ich verschachtelte JSON-Objekte (keine Arrays) verwende. Ich habe es durch die Verwendung der Set() -Funktion gelöst. Beispiel:

CJAVal msg, content;
msg["messageName"] = "TickData";
content["instrument"] = Symbol();
content["timeFrame"] = (int) Period();
content["time"] = (int) TimeCurrent();
content["open"] = iOpen(Symbol(), Period(), 0);
msg["content"].Set(content);
Print("Sending JSON to server: ", msg.Serialize());

 
Andrey Dik:

Es gibt einige Fehler in der Bibel. beigefügt ist die korrigierte Version, Dank an den Autor und wird wahrscheinlich nichts dagegen.

danke!

 

Wie entferne ich ein Element aus einem JSON-Baum? Es gibt eine Methode zum Setzen und Hinzufügen, aber nicht zum Löschen.

Vielen Dank im Voraus

[Gelöscht]  

Super, ich habe die Unterstützung für die Typen ulong und datetime hinzugefügt.

[Gelöscht]  
Ting Yu:

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

jv.Deserialize( result);


wie kann ich es iterieren

if result mag
[{"a":1},{"a":2}]

'

Sie können jv[0]["a"].ToInt() verwenden, um 1 zu erhalten, jv[1]["a"].ToInt(), um 2 zu erhalten