Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Нужна помощь с парсингом JSON (http://forum.oszone.net/showthread.php?t=339880)

Apock 28-03-2019 02:38 2865500

Нужна помощь с парсингом JSON
 
С++ Builder 10.2
Пытаюсь освоить парсинг JSON, но что-то отсутствие толковой документации завелов тупик.
Есть такой ответ от сервера:
Цитата:

{
"timezone": "UTC",
"serverTime": 1508631584636,
"rateLimits": [
// These are defined in the `ENUM definitions` section under `Rate limiters (rateLimitType)`.
// All limits are optional.
],
"exchangeFilters": [
// There are defined in the `Filters` section.
// All filters are optional.
],
"symbols": [{
"symbol": "ETHBTC",
"status": "TRADING",
"baseAsset": "ETH",
"baseAssetPrecision": 8,
"quoteAsset": "BTC",
"quotePrecision": 8,
"orderTypes": [
// These are defined in the `ENUM definitions` section under `Order types (orderTypes)`.
// All orderTypes are optional.
],
"icebergAllowed": false,
"filters": [
// There are defined in the `Filters` section.
// All filters are optional.
]
}]
}
и вот такой код:
Код:

TJSONObject *o = (TJSONObject*) TJSONObject::ParseJSONValue(TEncoding::ASCII->GetBytes(Memo1->Lines->Text),0);
  __try {
        TJSONArray *a = (TJSONArray*) o->Get("symbols")->JsonValue;
        for (int idx = 0; idx < a->Size(); idx++) {
          TJSONObject *symbol = (TJSONObject*) a->Get(idx);
          for (int idy = 0; idy < symbol->Count; idy++) {
                ShowMessage( symbol->Pairs[idy]->JsonString->ToString() + ':' +
                                        symbol->Pairs[idy]->JsonValue->ToString() );
          }
        }

  }
  __finally {
        o->Free();
  }

На третьей строке при попытке получить массив "symbols" вылетает ошибка Access Violation.
Если убрать всё остальное, к примеру так:
Цитата:

{
"symbols": [{
"symbol": "ETHBTC",
"status": "TRADING",
"baseAsset": "ETH",
"baseAssetPrecision": 8,
"quoteAsset": "BTC",
"quotePrecision": 8
}]
}
то всё проходит гладко и проблем не возникает.
Не могу понять как решить эту проблему.

Busla 28-03-2019 10:57 2865530

Цитата:

Цитата Apock
Есть такой ответ от сервера: »

это не JSON ;-)
в JSON нет комментариев

Apock 28-03-2019 11:22 2865532

Это пример ответа из документации сайта. Стирал эти комменты, не помогает.
Цитата:

{
"timezone": "UTC",
"serverTime": 1508631584636,
"symbols": [{
"symbol": "ETHBTC",
"status": "TRADING",
"baseAsset": "ETH",
"baseAssetPrecision": 8,
"quoteAsset": "BTC",
"quotePrecision": 8,
"icebergAllowed": false,
}]
}
Я не могу понять систему доступа JSON. Есть корневой объект, есть массив с именем, по которому я к нему обращаюсь. Почему наличие строк перед массивом мешает? И попытка получить доступ к одной из этих строк тоже заканчивается ошибкой.

Iska 28-03-2019 11:35 2865536

Busla, видимо, это расширение JSON5. И под него, надо полагать, нужен свой парсер.


Время: 20:08.

Время: 20:08.
© OSzone.net 2001-