Библиотеки: JSON Serialization and Deserialization (native MQL) - страница 12

 
danielsokolowsk:

Может ли кто-нибудь или автор ответить, предполагается ли поддержка вложенного JSON? То есть экземпляр CJAVal содержит ключи '2', и '3', которые являются еще одним экземпляром CJAVal. Код вроде бы выполняется, но при сериализации ключи пустые.

Например, я получаю:


Но должен получить

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

несколько примеров

   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

массив массивов

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)
 
Отличная разработка, спасибо, брат! Работает как часы, применил в своём роботе.
 
Konstantin Efremov:
Отличная разработка, спасибо, брат! Работает как часы, применил в своём роботе.

в библе есть косяки. в прикрепе поправленная версия, автору спасибо и наверное не будет против.

Файлы:
json.mqh  44 kb
 

Здравствуйте,


Я пытаюсь использовать эту библиотеку для чтения json файла.


Не могли бы вы привести пример в подобном случае?


Мои первые строки таковы:

   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);


Что я должен сделать, чтобы сохранить некоторые значения из json файла в моих переменных?


Спасибо за помощь!

Erwann.

 

После некоторых исследований я решил свою проблему :)


Нет необходимости использовать таблицу строк [], так как ограничение строки составляет 256 байт.


На самом деле длина строки не ограничена (только для инициализации между кавычками "".

Поэтому достаточно использовать этот код:

   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);


строковая переменная s может иметь длину более 256 символов :)


Пока,

Эрванн.

 
danielsokolowsk:

Может ли кто-нибудь или автор ответить, предполагается ли поддержка вложенного JSON? То есть экземпляр CJAVal содержит ключи '2', и '3', которые являются еще одним экземпляром CJAVal. Код вроде бы выполняется, но при сериализации ключи пустые.

Например, я получаю:


Но должен получить

Дэниел, я тоже столкнулся с проблемой пустых ключей при использовании вложенных JSON-объектов (не массивов). Я решил ее с помощью функции Set(). Пример:

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:

в библе есть косяки. в прикрепе поправленная версия, автору спасибо и наверное не будет против.

спасибо!

 

Как удалить элемент из дерева JSON. Есть метод Set, Add, но не Delete.

Заранее спасибо

[Удален]  

Замечательно, я добавил в него поддержку типов ulong и datetime.

[Удален]  
Ting Yu:

Результат WebRequest - это массив. И я вызываю его следующим образом

jv.Deserialize( result);


как мне его итерировать

if result likes
[{"a":1},{"a":2}]

'

вы можете использовать jv[0]["a"].ToInt() для получения 1, jv[1]["a"].ToInt() для получения 2