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

 

Du kennst schon das Beispiel der Referenz zu WebRequest() - und wie dort aus den geladenen Daten etwas lesbares gemacht wird?

Erst danach kann man die Analyse des Jason-Textes durchführen.

Dokumentation zu MQL5: Netzwerkfunktionen / WebRequest
Dokumentation zu MQL5: Netzwerkfunktionen / WebRequest
  • www.mql5.com
WebRequest - Netzwerkfunktionen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Carl Schreiber #:

Du kennst schon das Beispiel der Referenz zu WebRequest() - und wie dort aus den geladenen Daten etwas lesbares gemacht wird?

Erst danach kann man die Analyse des Jason-Textes durchführen.

okay ich hab es jetzt leicht geändert. das hat mir schon viel weitergeholfen.

Die meldung via Print lautet:

2022.12.21 20:20:48.718    jason_test (GER40,H1)    Die Datei wurde erfolgreich heruntergeladen, Größe 17 Byte.

Was für ich bedeutet, es kommt eine Antwort vom Server die ich nur noch irgend wie analysieren muss. Und es wurde eine Datei namens url erstellt die tatsächlich die gesuchte Antwort beinhaltet.

Danke dir Carl für deine Hilfe
 

Können Sie aktualisieren Funktion hinzufügen mag

JAval j1; j1.Add(1);
j1["a"] = 1;
j1["b"] = 2;


können Sie diese Funktionen hinzufügen?

j1.Del("a");
j1.Pop();
j1.shift();
j1.sort();
j1.sort();
 

Nach dem nächsten Update funktionierte es nicht mehr. Im Protokoll - Zeilennummern mit Fehlern:

Build 3756.

 

Es gibt eine Struktur wie diese

[

{

"ticket":671073362

},

{

"ticket":111111111

}

]


Ich möchte 2 Einträge erhalten. Sowohl das erste Ticket als auch das zweite.

string js = "{\"ticket\":671073362\"},{\"ticket\":111111111}";

jv.Deserialize(js);

Print( jv["ticket"].ToStr());

Auf diese Weise erhalte ich nur Zugriff auf das erste Ticket. Wie erhalte ich Zugriff auf das zweite und die nachfolgenden Tickets, falls es welche gibt?

Dieses Problem wurde hier diskutiert https://www.mql5.com/ru/forum/63015/page3#comment_2844920, aber dort hat der Autor eine solche Struktur in ein benanntes Array verpackt, so wie hier.

string js = "{\"array\":[{\"ticket\":671073362},{\"ticket\":111111111}]}";

jv.Deserialize(js);

for(int i = 0; i < ArraySize(jv["array"].m_e); i++)
   {
      Print(jv["array"].m_e[i]["ticket"].ToInt());
   }

So wird alles gefunden. Aber was mache ich, wenn ich die json-Struktur nicht ändern kann? Wie bekomme ich dieses Array und gehe die Elemente durch?

 
Nikita Chernyshov #:

Es gibt diese Struktur

[

{

"ticket":671073362

},

{

"ticket":111111111

}

]

...

Die angegebene Zeichenkette stimmt nicht mit der eingangs angegebenen Struktur überein und ist keine gültige json-Zeichenkette:

string js = "{\"ticket\":671073362\"},{\"ticket\":111111111}";

Sie sollte es sein:

string js = "[{\"ticket\":671073362},{\"ticket\":111111111}]";

Diese Bemerkung bezieht sich nur auf die Spezifikation der json-a, ohne Rücksicht darauf, wie sie in einer bestimmten Bibliothek implementiert ist. Ich verwende eine andere.

 
Stanislav Korotky #:

Die angegebene Zeichenkette entspricht nicht der am Anfang angegebenen Struktur und ist keine gültige json-Zeichenkette:

Sollte sein:

Diese Bemerkung bezieht sich nur auf die Spezifikation von json-a, ohne Rücksicht darauf, wie sie in einer bestimmten Bibliothek implementiert ist. Ich verwende eine andere.

nun, das ist richtig, es fehlt Quadrate, aber es hilft nicht mit ihnen)

[Gelöscht]  
zu viele Argumente für funktionsähnliches Makro 'DEBUG_PRINT_KEY' JAson.mqh 391 40
if (type != jtUNDEF) { DEBUG_PRINT_KEY(); return false; }  // wenn der Wert bereits einen Typ hat, ist dies ein Fehler

siehe Deklaration des Makros 'DEBUG_PRINT_KEY' JAson.mqh

#ifdef  DEBUG
    #define  DEBUG_PRINT_KEY() Print(key+" "+string(__LINE__))
#else
    #define  DEBUG_PRINT_KEY()
#endif

Diese Warnung erscheint bei der letzten mql5-Kompilierung

Irgendeine Idee, wie man das beheben kann?

 
Arpit T #:
Haben Sie eine Idee, wie man das beheben kann?

Entfernen Sie die Klammern

if (type != jtUNDEF) { DEBUG_PRINT_KEY; return false; }  // wenn der Wert bereits einen Typ hat, ist dies ein Fehler
#ifdef  DEBUG
    #define  DEBUG_PRINT_KEY Print(key+" "+string(__LINE__))
#else
    #define  DEBUG_PRINT_KEY
#endif
[Gelöscht]  
Manuel Alejandro Cercos Perez #:

Entfernen Sie die Klammern

behoben, danke

Ich hänge den korrigierten Code hier an

Dateien:
JAson_1.13.mqh  45 kb