Die Bibliothek ist sehr nützlich. Aber ich bin darauf gestoßen, dass bei der Serialisierung von Werten des Typs double ein starker Verlust an Präzision auftritt.
for (int i=0; i<ArraySize(minutes_open); ++i) jv["minutes_open"].Add(minutes_open[i]);
Nach der Serialisierung erhalte ich:
"minutes_open":[9.53e-01,9.53e-01,9.53e-01]
D.h. die letzten 2 signifikanten Zeichen gehen einfach verloren und alle Werte im Array werden einfach gleich. Infolgedessen gehen alle Berechnungen, die auf diesen Daten basieren, ins Leere....
Schließlich habe ich das Problem durch die Umwandlung von Array-Werten in Strings gelöst.
Die Dokumentation der JAson-Bibliothek ist nicht vollständig auf dieser Seite. Ich habe die Dokumentation mit mehr Details geschrieben und Unit-Tests hinzugefügt: https://github.com/vivazzi/JAson. Es könnte für jemanden nützlich sein.
Fügen Sie ich erstellt Ausgabe, die Beschreibung der Fehler der Verwendung von inneren Json (CJAVal Objekt) hat: https://github.com/vivazzi/JAson/issues/1.
Das CJAVal-Objekt wird nicht korrekt einem anderen CJAVal-Objekt als Objekt zugewiesen:
CJAVal data;
// einfache Struktur
data["a"] = 12;
// verschachtelte Struktur
CJAVal nested_data;
nested_data["k1"] = 7;
nested_data["k2"] = "baz";
data["b"] = nested_data;
Print(data["b"]["k1"].ToInt()); // 0 anstelle von 7Print(data["b"]["k2"].ToStr()); // "" anstelle von "baz"Print(data.Serialize()); // {"a":12,"":{"k1":7, "k2": "baz"}, "b":{}} anstelle von {"a":12, "b":{"k1":7, "k2": "baz"}}
Als Workaround muss man die Methode Set() verwenden:
Die JAson-Dokumentation ist auf dieser Seite nicht vollständig, also habe ich eine ausführlichere Dokumentation https://github.com/vivazzi/JAson/ geschrieben und Unit-Tests hinzugefügt: vielleicht findet sie jemand nützlich.
Und ich habe das Problem der Verwendung eines verschachtelten Json (CJAVal Objekt) beschrieben: https://github.com/vivazzi/JAson/issues/1.
Das CJAVal-Objekt wird nicht korrekt gespeichert, wenn Sie das Zeichen "=" verwenden (ein leerer Schlüssel wird gespeichert):
CJAVal data;
// einfache Struktur
data["a"] = 12;
// verschachtelte Struktur
CJAVal nested_data;
nested_data["k1"] = 7;
nested_data["k2"] = "baz";
data["b"] = nested_data;
Print(data["b"]["k1"].ToInt()); // 0 anstelle von 7Print(data["b"]["k2"].ToStr()); // "" anstelle von "baz"Print(data.Serialize()); // {"a":12,"":{"k1":7, "k2": "baz"}, "b":{}} anstelle von {"a":12, "b":{"k1":7, "k2": "baz"}}
Ja, in den Tests, die auf der Bibliotheksseite auf dieser Website beigefügt sind, können Sie feststellen, dass Sie die Set()-Methode verwenden müssen:
Aber wenn jemand die Bibliothek so korrigieren kann, dass es möglich ist, verschachtelte Json-Strukturen über das "="-Zeichen zu speichern, würde das vielen Leuten helfen. Mir ist nämlich aufgefallen, dass manche Leute denken, die Bibliothek hätte Fehler, wenn sie versuchen, eine verschachtelte CJAVal auf die übliche Weise über "=" zuzuweisen .
Ich hoffe, das ist in der MQL-Sprache überhaupt möglich. Ich habe versucht, es selbst zu korrigieren, aber ich habe keine tiefen Kenntnisse der MQL-Sprache, und bisher hat es nicht funktioniert, die Zuweisung über "=" zu tun.
Realization of JSON protocol in mql4 / mql5. You can create JSON object with data of different types and run serialization and deserialization of JSON data. Installing Usage Add and create object to work with JSON data. See simple example for easy understand: WARNING : To assign other object to current, use method instead of using the "=" sign...
Die Dokumentation der JAson-Bibliothek ist nicht vollständig auf dieser Seite. Ich habe die Dokumentation mit mehr Details geschrieben und Unit-Tests hinzugefügt: https://github.com/vivazzi/JAson. Es könnte für jemanden nützlich sein.
Fügen Sie ich erstellt Ausgabe, die Beschreibung der Fehler der Verwendung von inneren Json (CJAVal Objekt) hat: https://github.com/vivazzi/JAson/issues/1.
Das CJAVal-Objekt wird nicht korrekt einem anderen CJAVal-Objekt als Objekt zugewiesen:
Als Workaround müssen Sie die Methode Set() verwenden:
Wenn jemand helfen kann, dann werden viele MQL-Entwickler dankbar sein, da dieser Fehler schon seit vielen Jahren besteht.
Der Schlüssel wird mit dem Schlüssel des Unterobjekts überschrieben, in Ihrem Beispiel wird "b" mit dem Schlüssel von "nested_data" überschrieben, der leer ist.
Ich habe diese einfache Lösung verwendet, nicht vollständig getestet:
Das Problem der Zuweisung von verschachtelten Json-Strukturen über das "="-Zeichen wurde von Laszlo Tormasi im Kommentar https://www.mql5.com/en/forum/65320/page3#comment_21453129 gelöst .
JAson-Version mit Änderungenunter https://github.com/vivazzi/JAson.
Danke an alle, die versucht haben, das Problem zu verstehen und zu helfen!
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Die Bibliothek ist sehr nützlich. Aber ich bin darauf gestoßen, dass bei der Serialisierung von Werten des Typs double ein starker Verlust an Präzision auftritt.
Beispiel:
double minutes_open[] = {0.95347, 0.95317, 0.95324}
for (int i=0; i<ArraySize(minutes_open); ++i) jv["minutes_open"].Add(minutes_open[i]);
Nach der Serialisierung erhalte ich:
"minutes_open":[9.53e-01,9.53e-01,9.53e-01]
D.h. die letzten 2 signifikanten Zeichen gehen einfach verloren und alle Werte im Array werden einfach gleich. Infolgedessen gehen alle Berechnungen, die auf diesen Daten basieren, ins Leere....
Schließlich habe ich das Problem durch die Umwandlung von Array-Werten in Strings gelöst.
Hallo zusammen!
Die Dokumentation der JAson-Bibliothek ist nicht vollständig auf dieser Seite. Ich habe die Dokumentation mit mehr Details geschrieben und Unit-Tests hinzugefügt: https://github.com/vivazzi/JAson. Es könnte für jemanden nützlich sein.
Fügen Sie ich erstellt Ausgabe, die Beschreibung der Fehler der Verwendung von inneren Json (CJAVal Objekt) hat: https://github.com/vivazzi/JAson/issues/1.
Das CJAVal-Objekt wird nicht korrekt einem anderen CJAVal-Objekt als Objekt zugewiesen:
Als Workaround muss man die Methode Set() verwenden:
Wenn jemand helfen kann, dann werden viele MQL-Entwickler dankbar sein, da dieser Fehler schon seit vielen Jahren besteht.
Hallo zusammen!!!
Die JAson-Dokumentation ist auf dieser Seite nicht vollständig, also habe ich eine ausführlichere Dokumentation https://github.com/vivazzi/JAson/ geschrieben und Unit-Tests hinzugefügt: vielleicht findet sie jemand nützlich.
Und ich habe das Problem der Verwendung eines verschachtelten Json (CJAVal Objekt) beschrieben: https://github.com/vivazzi/JAson/issues/1.
Das CJAVal-Objekt wird nicht korrekt gespeichert, wenn Sie das Zeichen "=" verwenden (ein leerer Schlüssel wird gespeichert):
Ja, in den Tests, die auf der Bibliotheksseite auf dieser Website beigefügt sind, können Sie feststellen, dass Sie die Set()-Methode verwenden müssen:
Aber wenn jemand die Bibliothek so korrigieren kann, dass es möglich ist, verschachtelte Json-Strukturen über das "="-Zeichen zu speichern, würde das vielen Leuten helfen. Mir ist nämlich aufgefallen, dass manche Leute denken, die Bibliothek hätte Fehler, wenn sie versuchen, eine verschachtelte CJAVal auf die übliche Weise über "=" zuzuweisen .
Ich hoffe, das ist in der MQL-Sprache überhaupt möglich. Ich habe versucht, es selbst zu korrigieren, aber ich habe keine tiefen Kenntnisse der MQL-Sprache, und bisher hat es nicht funktioniert, die Zuweisung über "=" zu tun.
Hallo zusammen!
Die Dokumentation der JAson-Bibliothek ist nicht vollständig auf dieser Seite. Ich habe die Dokumentation mit mehr Details geschrieben und Unit-Tests hinzugefügt: https://github.com/vivazzi/JAson. Es könnte für jemanden nützlich sein.
Fügen Sie ich erstellt Ausgabe, die Beschreibung der Fehler der Verwendung von inneren Json (CJAVal Objekt) hat: https://github.com/vivazzi/JAson/issues/1.
Das CJAVal-Objekt wird nicht korrekt einem anderen CJAVal-Objekt als Objekt zugewiesen:
Als Workaround müssen Sie die Methode Set() verwenden:
Wenn jemand helfen kann, dann werden viele MQL-Entwickler dankbar sein, da dieser Fehler schon seit vielen Jahren besteht.
Das Problem liegt in der Copy-Methode.
Der Schlüssel wird mit dem Schlüssel des Unterobjekts überschrieben, in Ihrem Beispiel wird "b" mit dem Schlüssel von "nested_data" überschrieben, der leer ist.
Ich habe diese einfache Lösung verwendet, nicht vollständig getestet:
Vielen Dank, Laszlo Tormasi - Ihr Fix funktioniert und alle Tests haben bestanden!
Ich habe JAson mit Ihren Korrekturen aktualisiert: https://github.com/vivazzi/JAson
Das Problem der Zuweisung von verschachtelten Json-Strukturen über das "="-Zeichen wurde von Laszlo Tormasi im Kommentar https://www.mql5.com/en/forum/65320/page3#comment_21453129 gelöst .
JAson-Version mit Änderungenunter https://github.com/vivazzi/JAson.
Danke an alle, die versucht haben, das Problem zu verstehen und zu helfen!
Ein Fehler ("array out of range"), der bei negativen Array-Indizes auftrat, wurde behoben. Jetzt gibt der [] Operator NULL zurück.
Die Verarbeitung sieht jetzt so aus.
Außerdem habe ich der Einfachheit halber die Methode ToIntI hinzugefügt. Da ToInt long zurückgibt.
Ich verstehe nicht, wie man das verschachtelte json lesen kann.
Hier ist eine Zeichenfolge wie diese:
string str= { "key1": [ { "key2": [ { "key3": "val)" }, {}, {} ] } ] }Wie kann ich sie lesen und auf die Elemente zugreifen?
Egal wie ich es versuche, es funktioniert nicht.Ich verstehe nicht, wie man das verschachtelte json lesen kann.
Hier ist eine Zeichenfolge wie diese:
Wie kann ich sie lesen und auf die Elemente zugreifen?
Egal, wie oft ich es versuche, ich kann es nicht verstehen.string str; CJAVal data; str= "{" " \"key1\": [" " {" " \"key2\": [" " {" " \"key3\": \"val)\"" " }," " {}," " {}" " ]" " }" " ]" "}"; data.Deserialize(str); Print(data["key1"][0]["key2"][0]["key3"].ToStr());Wenn Sie die Struktur Ihrer json-Zeichenkette nicht verstehen oder etwas schief läuft, gehen Sie wie folgt vor:
Um die Struktur einer json-Zeichenkette leicht zu verstehen , verwenden Sie diese Website: https: //jsoneditoronline.org/.