Bibliotecas: JSON Serialization and Deserialization (native MQL) - página 2

 
Виктор Василюк:
¿Qué hacemos ahora? ¿Hay otra forma de resolverlo?
No busques una solución única. Busca una solución diferente para cada problema.
 
Виктор Василюк:

Gracias por la librería, pero hay algunos problemas.

No puedo averiguar cómo puedo pegar una matriz utilizando la biblioteca?

Por ejemplo, hay

string a[] = {"1", "2", "3"};
int b[] = {1, 2, 3};
double c[] = {1.1, 2.9, 3.03};

Los problemas surgen a la hora de declarar una variable de tipo CJAVal. Usar CJAVal primer(jtARRAY, a); no ayuda.


Podrías por favor complementar o ampliar el archivo de ejemplos ?????


Saludos Victor,

Gracias por tu comentario. Efectivamente, la versión de la librería no tiene una función para añadir elementos de array explícitamente.

La librería ha sido actualizada.

La versión 1.03 estará disponible en Codebase después de su verificación.

De momento puedes descargar la 1.03 adjunta al post.


Ejemplo de trabajo para un array:

  string a[] = {"1", "2", "3"};
  int b[] = {1, 2, 3};
  double c[] = {1.1, 2.9, 3.03};

  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"].Add(c[0]);
  js["c"].Add(c[1]);
  js["c"].Add(c[2]);

  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["a"].m_e[2].ToStr()); // Вывод   3


Archivos adjuntos:
JAson.mqh  16 kb
 

Alexey, ¡gracias por tu trabajo! ¡¡¡Biblioteca muy necesaria!!!

Tengo una tarea tan práctica.

Hay 1 objeto CJAVal de tipo base de datos. Y hay 2 objetos CJAVal de tipo propiedades de orden.

Quiero que la base de datos contenga datos sobre estos pedidos.

Aproximadamente así:

//--- objetos
   CJAVal jv_database, // DB
   jv_order_1,         // pedido 1
   jv_order_2;         // orden 2
//--- DB
   jv_database["Result"]="Success";
   jv_database["ErrorMessage"]="No error";
   // jv_database["Response"][2]={jv_order_1,jv_order_2}; // WANTED.
//--- orden 1
   jv_order_1["symbol"]="EURUSD";
   jv_order_1["ticket"]="1505254";
   jv_order_1["open_price"]="1.1065";
   jv_order_1["open_time"]="19.09.2016 11:53:31";
//--- warrant  2
   jv_order_2["symbol"]="USDJPY";
   jv_order_2["ticket"]="1505321";
   jv_order_2["open_price"]="100.02";
   jv_order_2["open_time"]="20.09.2016 14:12:53";

Me gustaría que el campo Respuesta fuera un array de propiedades de los pedidos.

Y que dicho registro jv_database["Response"][idx] devolviera un puntero o el propio objeto pedido.

Por favor, aconséjeme. Gracias

 
Dennis Kirichenko:
Y que dicho registro jv_database["Response"][idx] devuelva un puntero o el propio objeto pedido.

¿Entiendo correctamente que estamos hablando de la referencia por índice numérico? ¿Debería devolverse un puntero a un objeto del array DB["Respuesta"] en el índice [idx]?

Creo que sí.

---

pero la inicialización por tipo {x1, x2} - probablemente no se pueda hacer. Según recuerdo, este tipo de inicialización está disponible sólo en el momento de la declaración de la variable, es decir, como una forma de constructor. Pero no como una forma de establecer valores en el array creado.

Por eso tendrás que hacerlo de esta forma:

jv_database["Response"][0]=jv_order_1;
jv_database["Response"][1]=jv_order_2;
 
o_O:

¿He entendido bien que se trata de una manipulación por índice numérico? ¿Se debe devolver un puntero a un objeto del array DB["Respuesta"] por índice [idx]?

Creo que sí.

Sí, es correcto.
 

Otra pregunta. Existe un objeto de órdenes:

CJAVal order;
order["symbol"];
order["type"];
order["lot"];
order["price_open"];
order["price_close"];
order["stop_loss"];
order["take_profit"];

La línea fuente de la que leemos contiene información sobre varias órdenes. No se sabe de antemano cuántos son.

¿Cómo puedo leer toda la información de la cadena sin especificar el tamaño del objeto pedidos ?

 

¿De qué línea estamos hablando?

 
o_O:

¿De qué cadena estamos hablando?

Una cadena que contiene datos de la base de datos de todos los pedidos (del servidor).
 

Respuesta incorrecta).

Necesito ver exactamente lo que quieres parsear, es json con un array o te lo estás inventando. Es difícil de adivinar.

 

Ese es el tipo de cuerda:

{
     "symbol": "USDJPY",
     "type": "Buy",
     "lot": 0.5,
     "price_open": 102.36,
     "price_close": 102.44,
     "stop_loss": 99.25,
     "take_profit": 103.25 
    },
    {
     "symbol": "EURUSD",
     "type": "Sell",
     "lot": 0.2,
     "price_open": 1.1044,
     "price_close": 1.1252,
     "stop_loss": 1.1434,
     "take_profit": 1.0922
    }
}