C++ Builder JSON REST запрос

Aug 15, 2019 08:47

Для примера выполняем запрос к docker registry, получаем список образов ( images ). RAD Studio CE 10.3 без дополнительных библиотек.

Запрос через curl. Ответ:

curl http://1.1.1.1:5000/v2/_catalog
{"repositories":["alpine","docker","nginx"]}

Unit1.cpp

ListBox1->Items->Clear(); //Чистим, будем выводить сюда репы
RESTClient1->ResetToDefaults();
RESTClient1->BaseURL = repoUrl; //Тут устанавливает путь к репозиторию: http://1.1.1.1:5000/v2/

try {
  //Для RESTRequest1->Resource устанавливаем _catalog
  //Полный запрос получится http://1.1.1.1:5000/v2/_catalog
RESTRequest1->Execute(); //Выполняем запрос.

TJSONValue *jResponse = RESTResponse1->JSONValue; //Сам ответ
TJSONObject *JSON = (TJSONObject*)TJSONObject::ParseJSONValue(jResponse->ToString()); //Парсим его
TJSONPair *pair = JSON->Get("repositories"); //Получаем содержимое "массива" repositories
TJSONObject *jRepos = (TJSONObject*) pair->JsonValue; //В объект его и идём дальше
TJSONArray *jVal = (TJSONArray*)TJSONObject::ParseJSONValue(jRepos->ToString()); //Делаем из него массив, для дальнейшего обхода

int size = jRepos->Size(); //Кол-во репозиториев

for (int i = 0; i < size; ++i) {
TJSONValue* LItem = jVal->Get(i);
String repo = LItem->ToString(); //Имя образа, будет с кавычками. Далее удаляем их
repo.Delete(1,1);
repo.Delete(repo.Length(),1);
ListBox1->Items->Add(repo); //Добавляем в список
}
} catch (const Exception& e) {
MessageDlg("Exception: Нет подключения к репозиторию!", mtError, TMsgDlgButtons() << mbOK, 0);
}

c++, rad studio, json

Previous post Next post
Up