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

 
o_o:

Was meinst du damit? Du hast diese Array-Tiefen selbst gemacht.

Habe ich das? - Nein, so weit geht meine Phantasie nicht, aber das ist sozusagen ein konkretes Beispiel aus dem Leben.

Ich meinte - können wir nicht auf Zeiger und ausgeklügelte Konstruktionen verzichten? Ich möchte es einfach halten (über den Bibliothekscode selbst werde ich mich bescheidenerweise ausschweigen).

 
Andrey Dik:

Habe ich das? - Nein, so weit geht meine Phantasie nicht, aber das ist sozusagen ein konkretes Beispiel aus dem Leben.

Ich meinte, kannst du nicht auf Zeiger und kopflastige Konstruktionen verzichten?

Wo willst du ohne Zeiger auskommen? Was genau willst du? Ein Stück json im Log? Einen "want money" Button?

 
o_o:

Was genau brauchen Sie? Ein Stück json im Protokoll? Eine Schaltfläche "Geld wollen"?

Genau darum geht es hier:

CJAVal* j1=GetPointer(js.m_e[i].m_e[i1]);

Wie kann man, ohne den Bibliothekscode zu kennen, erraten, was es ist und warum es getan werden sollte, um das zu bekommen, was man will?! Es sollte Funktionen wie ToDbl() für den einfachen Zugriff auf Daten geben.

Wie ich sehe, bin ich nicht der einzige, der so "ahnungslos" ist.

ss. z.B. m_e - was ist dieses blecherne Ding? könnte es nicht z.B. group heißen? oder m_key? - Nun, es ist nichts anderes als groupName! Sind es viel mehr Buchstaben? - Nein, aber viel klarer.

Fazit: Die Bibliothek ist sehr mächtig und wirkt Wunder, aber sie ist in "trockener Sprache" geschrieben und es ist besser, sich den Code für schwache Nerven, stillende Frauen und Kinder nicht anzusehen....

 
Andrey Dik:

Darum geht es hier:

Wie kann man, ohne den Bibliothekscode zu kennen, erraten, was es ist und warum es getan werden sollte, um das zu bekommen, was man will?! Es sollte Funktionen wie ToDbl() für den einfachen Datenzugriff geben.

Wie ich sehe, bin ich nicht der einzige, der so "ahnungslos" ist.

ss. z.B. m_e - was ist dieses blecherne Ding? könnte es nicht z.B. group heißen? oder m_key? - Nun, es ist nichts anderes als groupName! Sind es viel mehr Buchstaben? - Nein, aber es ist viel klarer.

Fazit: Die Bibliothek ist sehr mächtig und wirkt Wunder, aber sie ist in "trockener Sprache" geschrieben und es ist besser, sich den Code nicht für schwache Nerven, stillende Frauen und Kinder anzusehen....

Vielleicht sollten Sie eine andere Bibliothek ausprobieren?

Ich habe sie früher verwendet, aber sie ließ sich nicht mit MQL5 (alte Version) kompilieren .... Sie müssen sie anpassen... oder eine neue Version ausprobieren...

http://www.lordy.co.nf/mql4/

es gab irgendwo im Forum einen Hinweis darauf...

---------------------

hier ist es...

https://www.mql5.com/en/code/11134

 
Andrey Dik:

Darum geht es hier:

Wie kann man, ohne den Bibliothekscode zu kennen, erraten, was es ist und warum es getan werden sollte, um das zu bekommen, was man will?! Es sollte Funktionen wie ToDbl() für den einfachen Datenzugriff geben.

Wie ich sehe, bin ich nicht der einzige, der so "ahnungslos" ist.

ss. z.B. m_e - was ist dieses blecherne Ding? könnte es nicht z.B. group heißen? oder m_key? - Nun, es ist nichts anderes als groupName! Sind es viel mehr Buchstaben? - Nein, aber es ist viel klarer.

Fazit: Die Bibliothek ist sehr mächtig und wirkt Wunder, aber sie ist in "trockener Sprache" geschrieben, und es ist besser, sich den Code für schwache Nerven, stillende Frauen und Kinder nicht anzusehen....

Wer hat Sie also gezwungen, in das m_e-Array zu gehen?

Ich weiß nicht, was Sie von dem Code wollen. Und ich weiß nicht, was für eine Art von Aufgabe du entwickelst.

---

Zunächst einmal ist json ein Format für die Datenübertragung, eine Struktur. Wenn du die Struktur der empfangenen Daten nicht verstehst, ist das nicht das Problem meiner Klassen, sondern deines. Gehen Sie zur Dokumentation Ihrer Datenquelle und suchen Sie dort nach dem Verständnis.

Zweitens: Die Klasse implementiert die grundlegenden Funktionen der Arbeit mit dem Format - Serialisierung, Speicherung der Struktur und bequeme Handhabung

Wenn Sie Daten aus einem bestimmten Array abrufen wollten, würden Sie bequemen Code schreiben.

Print( js["фирма1"]["модельный_ряд1"][0][0].TODbl() );

und nicht diesen langwierigen Blödsinn in Form von Schleifen, um die ganze Struktur abzurufen. Ich weiß nicht, worum es da ging.

 
Delta.800:

Vielleicht sollten Sie eine andere Bibliothek ausprobieren.

Ich habe sie früher verwendet, aber sie ließ sich nicht mit MQL5 kompilieren (alte Version) .... Du musst sie anpassen... oder eine neue Version ausprobieren...

http://www.lordy.co.nf/mql4/

es gab irgendwo im Forum einen Hinweis darauf....

---------------------

hier ist es...

https://www.mql5.com/en/code/11134

Danke, aber ich vertraue Sergeyevs Code vollkommen.

Ich war dumm mit den Zeigern, natürlich, ich entschuldige mich. Schwierig zu lesen - fii, was für ein Problem...

 

o_o:

Print( js["фирма1"]["модельный_ряд1"][0][0].TODbl() );

und nicht dieser langwierige Schwachsinn in Form von Schleifen durch die gesamte Struktur. Ich weiß nicht, was das alles sollte.

Bei Gruppennamen können die Daten nicht existieren, oder die Gruppe ist nicht vollständig, oder der Gruppenname ist nicht in den Daten, oder etwas anderes... wie dann?

So ist es einfacher und übersichtlicher und man kann immer die Größe von Arrays überprüfen, so dass man keine Probleme mit dem Füllen seiner Strukturen hat:

js.group [счетчикФирм].group [счетчикМодельногоРяда].group [счетчикМоделей].group [счетчикМодельВизОбъем].ToDbl ());

 

bei solchen Varianten ist nicht klar, was mit einem nicht existierenden Element zu tun ist

wie dieses

js["фирма1"]["модельный_ряд1"][0][0].TODbl()

Auf diese Weise

js.group [countFirmen].group [countModelRow].group [countModels].group [countModelVolume].ToDbl ());


wenn js["firm1"] oder js.group [counterFirms] nicht erscheint, was soll ausgegeben werden ? und ob überhaupt etwas ausgegeben werden soll ?

an dieser Stelle wird auf das Nullelement zugegriffen und ein Fehler tritt auf....

 
o_o:

bei solchen Varianten ist nicht klar, was mit einem nicht existierenden Element geschehen soll

wie dieses

js["фирма1"]["модельный_ряд1"][0][0].TODbl()

auf diese Weise

js.group [countFirmen].group [countModelRow].group [countModels].group [countModelVolume].ToDbl ());


wenn js["firm1"] oder js.group [counterFirms] nicht erscheint, was soll ausgegeben werden ? und ob überhaupt etwas ausgegeben werden soll ?

an dieser Stelle wird ein Verweis auf ein Nullelement und ein Fehler ausgegeben...

In einem Laden gibt es Regale, für jedes Genre und jeden Autor gibt es ein anderes Regal und andere Regale (Struktur/en, mit denen das Programm arbeitet). Und es gibt Bücher (Daten), die in den Laden kommen können oder auch nicht.....

Und jedes Mal, wenn ein neues Buch eintrifft, müssen die Regale neu gestaltet werden? Nein, natürlich nicht.

Auf diese Art und Weise zu adressieren:

js["фирма1"]["модельный_ряд1"][0][0].TODbl()

Sie müssen den Namen der Gruppe kennen, und wenn die Gruppe in den eingehenden Daten vorhanden ist, aber der Name nicht? Und wenn ..... können viele Dinge passieren...

Es ist einfacher, einfach die Größe der Gruppen der Daten und ihre Anzahl zu überprüfen, das ist alles, wenn mindestens eine Größe nicht mit unseren Strukturen übereinstimmt, dann sind die Daten Bit und es hat keinen Sinn, mit ihnen herumzuspielen und herauszufinden, was genau in ihnen Bit ist, ignorieren Sie einfach das Paket dieser Daten und das ist alles. Es gibt keine Probleme mit dem Zugriff auf nicht existierende (oder leere) Array-Zellen und es gibt keine Unsicherheit über die Korrektheit der angekommenen Daten. Und das Programm wird niemals aus irgendeinem Grund abstürzen.

[Gelöscht]  

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. Der Code scheint zu laufen, aber wenn er serialisiert wird, sind die Schlüssel leer.

Beispiel: Ich erhalte:

{"":{"sl":5270.98000000,"tp":5285.26000000,"order":2},"":{"sl":5274.80000000,"tp":5289.06000000,"order":3}}

Es sollte aber Folgendes angezeigt werden

{"2":{"sl":5270.98000000,"tp":5285.26000000,"order":2},"3":{"sl":5274.80000000,"tp":5289.06000000,"order":3}}