Librerie: JSON

 

JSON:

Serializzazione e deserializzazione del formato JSON

Author: Kuzma Shevelev

 
Automated-Trading:

JSON:

Autore: Kuzma Shevelev

Sapete dirmi perché la libreria viene visualizzata solo tra i russi?
. Penso che così è improbabile che venga notata e possa essere utilizzata, anche se credo che sarebbe molto comodo per generare dati per le query di rete.

 
Non ho guardato la vostra implementazione perché uso jAson. Ci sono dei vantaggi nella vostra implementazione? Può fare un confronto?
JSON Serialization and Deserialization (native MQL)
JSON Serialization and Deserialization (native MQL)
  • www.mql5.com
Сериализация и десериализация JSON протокола. Портированный код со скоростной библиотеки С++.
 
Edgar Akhmadeev #:
Non ho guardato la vostra implementazione perché uso jAson. Ci sono dei vantaggi nella vostra implementazione? Può fare un confronto?

1. Dimensioni, 20kb contro 30kb

2. Permette di lavorare in modo flessibile con qualsiasi struttura JSON
- Ci sono metodi per definire i tipi di valore, che permettono di gestire i casi in cui il valore può essere di tipi diversi
- Ci sono metodi per ottenere le chiavi degli oggetti, che permettono di gestire i casi in cui le chiavi non sono note in anticipo
- Interfaccia di libreria facile da usare, che rende il processo di riempimento della struttura JSON comodo e comprensibile.

3. Codicesorgente chiaro e leggibile
- Permette di comprendere facilmente il lavoro della libreria, rendendo trasparente il principio del suo funzionamento
- La struttura chiara della libreria consente di eseguire comodamente il debug delle richieste e delle risposte di rete
- Non utilizza l'overloading degli operatori, fornendo metodi con nomi chiari, rendendo il codice comprensibile a qualsiasi sviluppatore.

 
Kuzma Shevelev #:

Sapete dirmi perché la libreria viene visualizzata solo tra i russi?
Penso che sia così improbabile che qualcuno la noti e la usi, anche se credo che sarebbe molto comodo per generare dati per le interrogazioni in rete.

Perché il codebase è fatto in questo modo (almeno per ora) - per impostazione predefinita il codice è garantito per essere registrato solo in una versione linguistica (si potrebbe anche fare nel ramo inglese), e il trasferimento ad altre lingue - solo in alcune condizioni (dovrebbe essere specificato - automaticamente per popolarità, per comando dei moderatori o in qualche altro modo).

Per quanto riguarda il tema json in sé, esiste anche un'implementazione minimalista di toyjson.mqh da algobook.

Учебник по MQL5: Расширенные средства языка / Проекты / Клиентская программа сигнального сервиса на MQL5
Учебник по MQL5: Расширенные средства языка / Проекты / Клиентская программа сигнального сервиса на MQL5
  • www.mql5.com
Итак, мы решили, что текст в сообщениях сервиса будет в формате JSON. В наиболее распространенном варианте, JSON представляет собой текстовое...
 
Kuzma Shevelev #:

1. Dimensioni, 20kb vs. 30kb

2. Permette di lavorare in modo flessibile con qualsiasi struttura JSON
- Esistono metodi per definire i tipi di valore, che permettono di gestire i casi in cui il valore può essere di tipi diversi
- Esistono metodi per ottenere le chiavi degli oggetti, che permettono di gestire i casi in cui le chiavi non sono note in anticipo
- Comoda interfaccia di libreria, che rende comodo e comprensibile riempire la struttura JSON.

3. Codicesorgente chiaro e leggibile
- Permette di comprendere facilmente il lavoro della libreria, rendendo trasparente il principio del suo funzionamento
- La struttura chiara della libreria consente di eseguire comodamente il debug delle richieste e delle risposte di rete
- Non utilizza l'overloading degli operatori, fornendo metodi con nomi chiari, rendendo il codice comprensibile a qualsiasi sviluppatore.

Qui ho anche deciso di vedere cosa significa " codice sorgente comprensibile e leggibile dall'uomo" :-)

cancellate il punto 3 - voi, come l'autore di jAson, non vi siete nemmeno preoccupati di scrivere commenti e documentazione. E con gli operatori è più comodo e chiaro per l'utente, quindi evitarli è più uno svantaggio che un vantaggio.

 
Stanislav Korotky #:

Poiché il codebase è fatto in questo modo (almeno per ora) - per impostazione predefinita il codice è garantito per essere registrato solo in una versione linguistica (si potrebbe anche fare nel ramo inglese), e il porting in altre lingue - solo a certe condizioni (dovrebbe essere specificato - automaticamente per popolarità, per comando dei moderatori o in qualche altro modo).

Per quanto riguarda il tema json in sé, esiste anche un'implementazione minimalista di toyjson.mqh da algobook.

Ho cercato, c'è davvero, credo anche una versione molto buona

Ma in ogni caso, penso che questa libreria troverà il suo pubblico, a cui piacerà l'interfaccia che ho implementato per usarla.

 
Kuzma Shevelev #:

Sapete dirmi perché la libreria viene visualizzata solo tra i russi?
Penso che sia così improbabile che qualcuno la noti e la usi, anche se credo che sarebbe molto comodo per generare dati per le interrogazioni in rete.

Per rendere il tuo codice visibile al pubblico di lingua inglese, dovresti pubblicarlo su un forum inglese.

Andare sul forum inglese.


Andare al loro codobase.



Aggiungere il codice.


Ora, il codice da un segmento del forum non viene copiato automaticamente in un altro segmento, dovete farlo voi.

 

Ho usato JAson per molto tempo. Ora ho deciso di confrontare la velocità di 3 librerie, tra cui ToyJson3 del libro. Come esempio di json ho preso la risposta di Binance a "exchangeInfo" con una dimensione di 768 Kb. Viene analizzato nella sua interezza quando la libreria lo legge da una stringa, quindi seleziono un carattere e leggo tutti i suoi dati. Risultato:

JAson - 122 ms
ToyJson3 - 54 ms
json - 48 ms

Inoltre, json non ha solo la deserializzazione ma anche la serializzazione, ed è necessario per l'API dei futures di Binance. Non so se esista in altre librerie, è difficile analizzare i codici degli altri.

Ma non sono bravo con l'OOP e non capisco affatto questa costruzione:

    JSON::Object* json1 = new JSON::Object()
        .setProperty("number", 123456)
        .setProperty("string", "text")
        .setProperty("boolean", true)
        .setProperty("object", new JSON::Object()
            .setProperty("number", 123456)
            .setProperty("string", "text")
            .setProperty("boolean", true)
            .setProperty("array", new JSON::Array())
        )
        .setProperty("array", new JSON::Array()
            .add(true) // booleano
            .add(123456) // numero
            .add("string") // stringa
            .add(new JSON::Object()
                .setProperty("number", 123456)
                .setProperty("string", "text")
            )
            .add(new JSON::Array()
                .add(true)
                .add(123456)
                .add("string")
            )
        );

    string exampleText = json1.toString();
 
A dire il vero, guarderò anche a ToyJson3: è stato fatto del lavoro per risparmiare memoria, è importante.
 
Edgar Akhmadeev #:
Non capisco affatto questa costruzione
Non ho guardato il codice della libreria, ma a giudicare dal frammento che hai presentato, i metodi setProperty e Add restituiscono un riferimento all'oggetto (this), quindi puoi fare riferimento al metodo della classe di nuovo tramite un punto. Questo ti permette di raccogliere tali catene di chiamate. Questo ti permette di raccogliere tali catene di chiamate.