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

 
danielsokolowsk:

¿Podría alguien o el autor responder si se supone que esto soporta JSON anidado? Es decir, una instancia CJAVal contiene las claves '2', y '3' que son otra instancia CJAVal. El código parece funcionar pero cuando se serializa las claves están en blanco.

Ejemplo, estoy recibiendo:


Pero debería estar recibiendo

https://www.mql5.com/ru/forum/63015

algunos ejemplos

   string a[] = {"1", "2", "3"};
   int b[] = {1, 2, 3};
   
   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"][0]=1.1;
   js["c"][1]=2.9;
   js["c"][2]=3.03;
   
   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["c"][2].ToStr()); // 3.03000000

array de arrays

JAval j1; j1.Add(1);

JAval j2; j2.Add(2); j2.Add(3);

JAval js;

js["a"].Add(j1);
js["a"].Add(j2);

// { a: [ [1], [2,3] ]; }
Библиотеки: JSON Serialization and Deserialization (native MQL)
Библиотеки: JSON Serialization and Deserialization (native MQL)
  • 2015.08.18
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: JSON Serialization and Deserialization (native MQL)
 
¡Gran diseño, gracias hermano! Funciona como un reloj, lo usé en mi robot.
 
Konstantin Efremov:
¡Gran diseño, gracias hermano! Funciona como un reloj, lo usé en mi robot.

Hay algunos errores en la biblia. adjunto la versión corregida, gracias al autor y probablemente no le importará.

Archivos adjuntos:
json.mqh  44 kb
 

Hola,


Intento usar esta librería para leer un archivo json.


¿podría proporcionar un ejemplo en un caso así?


Mis primeras lineas son :

   string s[];
   int cpt=0;
   
   int handle=FileOpen("json_sample.txt",FILE_READ|FILE_TXT|FILE_ANSI);
   while(!FileIsEnding(handle)) {ArrayResize(s,ArraySize(s)+1); s[cpt++]=FileReadString(handle);}
   FileClose(handle);


¿Qué tengo que hacer para almacenar algunos valores del archivo json en mis variables?


Gracias por su ayuda.

Erwann.

 

Después de algunas investigaciones he resuelto mi problema :)


No es necesario utilizar la tabla de cadenas [] debido a la limitación de la cadena es de 256 bytes.


No hay limitación de longitud de cadena de hecho (sólo para la inicialización entre comillas "".

Así que sólo tiene que utilizar este código :

   CJAVal srce;
   
   string s;
   int cpt=0;
   
   int handle=FileOpen("json_sample.txt",FILE_READ|FILE_TXT|FILE_ANSI);
   while(!FileIsEnding(handle)) StringAdd(s,FileReadString(handle));
   FileClose(handle);
   
   srce.Deserialize(s);


la variable s string puede tener una longitud superior a 256 caracteres :)


Adios,

Erwann.

 
danielsokolowsk:

¿Podría alguien o el autor responder si se supone que esto soporta JSON anidado? Es decir, una instancia CJAVal contiene las claves '2', y '3' que son otra instancia CJAVal. El código parece funcionar pero cuando se serializa las claves están en blanco.

Ejemplo, estoy recibiendo:


Pero debería estar recibiendo

Daniel, yo también me encontré con el problema de las claves vacías al utilizar objetos JSON anidados (no arrays). Lo resolví utilizando la función Set(). Ejemplo:

CJAVal msg, content;
msg["messageName"] = "TickData";
content["instrument"] = Symbol();
content["timeFrame"] = (int) Period();
content["time"] = (int) TimeCurrent();
content["open"] = iOpen(Symbol(), Period(), 0);
msg["content"].Set(content);
Print("Sending JSON to server: ", msg.Serialize());

 
Andrey Dik:

hay algunos errores en la biblia. adjunto la versión corregida, gracias al autor y probablemente no le importará.

¡gracias!

 

¿Cómo puedo eliminar un elemento de un árbol JSON. Hay método para Establecer, para Añadir pero no para Eliminar

Gracias de antemano

[Eliminado]  

Impresionante, he añadido ulong y datetime tipo de apoyo a la misma.

[Eliminado]  
Ting Yu:

el resultado de WebRequest es un array. e invoco así

jv.Deserialize( resultado);


como puedo iterarlo

if resultado le gusta
[{"a":1},{"a":2}]

'

puedes usar jv[0]["a"].ToInt() para obtener 1,jv[1]["a"].ToInt() para obtener 2