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

 
Виктор Василюк:
и как теперь быть? есть варианты по другому порешать это?
Не искать универсальности. Для каждой задачи искать свое решение.
 
Виктор Василюк:

спс за либу, но возникли некоторые проблемы.

Я не могу понять как мне засунуть массив с помощью библиотеки?

например, есть

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

проблемы возникают на уровне объявления переменной типа CJAVal. Использование CJAVal primer(jtARRAY, a); не помогает.


Вы могли бы дополнить или расширить файл примеров ???


Приветствую Виктор,

Спасибо за замечание. Да действительно, в версии библиотеки нет функции добавления элементов массива явным образом.

Библиотеку обновил.

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

Вы можете пока скачать 1,03 приложенную к посту.


Рабочий пример для массива:

  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


Файлы:
JAson.mqh  16 kb
 

Алексей, спасибо за труды! Очень нужная библиотека!!!

У меня такая практическая задача.

Есть 1 объект CJAVal типа базы данных. И есть 2 объекта CJAVal типа свойств ордера.

Хочу, чтобы база данных содержала данные об этих ордерах.

Примерно так:

//--- объекты
   CJAVal jv_database, // БД
   jv_order_1,         // ордер 1
   jv_order_2;         // ордер 2
//--- БД
   jv_database["Result"]="Success";
   jv_database["ErrorMessage"]="No error";
   // jv_database["Response"][2]={jv_order_1,jv_order_2};  // ХОТЕЛКА
//--- ордер 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";
//--- ордер 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";

Хотелось бы, чтобы поле Response было массивом свойств ордеров.

И чтобы такая запись jv_database["Response"][idx] возвращала указатель или сам объект ордера.

Прошу подсказать. Спасибо

 
Dennis Kirichenko:
И чтобы такая запись jv_database["Response"][idx] возвращала указатель или сам объект ордера.

правильно ли понимаю, что речь про обращение по числовому индексу? Должен возвращаться указатель на объект из массива DB["Response"] по индексу [idx]?

думаю можно.

---

а инициализация по типу {x1, x2} - наверно сделать нельзя. Так как такой вид инициализации как я помню доступен только на момент объявления переменной, то есть как форма конструктора. Но не как форма задания значений в созданном массиве.

Поэтому вам надо будет делать как-то так:

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

правильно ли понимаю, что речь про обращение по числовому индексу? Должен возвращаться указатель на объект из массива DB["Response"] по индексу [idx]?

думаю можно.

Да, верно.
 

Ещё вопрос. Есть объект ордера:

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

В исходной строке, откуда читаем, содержится информация о нескольких ордерах. Заранее неизвестно сколько их.

Как можно, не указывая размера для объекта order считать из строки всю инфу?

 

про какую строку речь?

 
o_O:

про какую строку речь?

Строка, содержащая данные из БД по всем ордерам (с сервера).
 

неверный ответ.)

мне надо видеть конкнретно что вы хотите парсить, json это с массивом или вы придумываете что то свое. Сложно догадаться.

 

Вот такой вид строки:

{
     "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
    }
}
Причина обращения: