![Компьютерный форум OSzone.net](images/oszone.net.print.gif) |
|
Нужна помощь с парсингом 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
}]
}
|
то всё проходит гладко и проблем не возникает.
Не могу понять как решить эту проблему.
|
Цитата:
Цитата Apock
Есть такой ответ от сервера: »
|
это не JSON ;-)
в JSON нет комментариев
|
Это пример ответа из документации сайта. Стирал эти комменты, не помогает.
Цитата:
{
"timezone": "UTC",
"serverTime": 1508631584636,
"symbols": [{
"symbol": "ETHBTC",
"status": "TRADING",
"baseAsset": "ETH",
"baseAssetPrecision": 8,
"quoteAsset": "BTC",
"quotePrecision": 8,
"icebergAllowed": false,
}]
}
|
Я не могу понять систему доступа JSON. Есть корневой объект, есть массив с именем, по которому я к нему обращаюсь. Почему наличие строк перед массивом мешает? И попытка получить доступ к одной из этих строк тоже заканчивается ошибкой.
|
Busla, видимо, это расширение JSON5. И под него, надо полагать, нужен свой парсер.
|
Время: 03:26.
© OSzone.net 2001-