Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2014, 17:35   #1
Cruzel
Пользователь
 
Регистрация: 05.11.2011
Сообщений: 31
По умолчанию Получение ответа от компонента REST

Здравствуйте. Такая проблема - пишу программу для работы с API Вконтакте, решил воспользоваться компонентом REST Client. Проблема в обработке ответа от сервера. Он приходит в JSON-формате, и хотелось бы обрабатывать это средствами того же компонента REST.

Вот, к примеру, как это делается на Delphi:

Код:
procedure TForm21.RESTRequest1AfterExecute(Sender: TCustomRESTRequest);
const
  //тип ответа сервера
  cResponseKind : array [0..3] of string = ('drive#fileList','drive#file','drive#about','drive#revision');
var JSONObject: TJSONObject;
    Kind: string;
begin
  if Assigned(Sender.Response.JSONValue) then
    begin
      JSONObject:=Sender.Response.JSONValue as TJSONObject;
      //узнаем тип ответа сервера
      Sender.Response.GetSimpleValue('kind',Kind);
      case AnsiIndexStr(Kind, cResponseKind) of
        0:ParseFileList(JSONObject);
        1:ParseFile(JSONObject);
      end;
    end;
end;
Далее идёт такой код:

Код:
procedure TForm21.ParseFile(AJSONObject: TJSONObject);
begin
  Memo1.Lines.Clear;
  Memo1.Lines.Add('Title: '+AJSONObject.Get('title').JsonValue.Value);
  Memo1.Lines.Add('Mime-Type: '+AJSONObject.Get('mimeType').JsonValue.Value);
  Memo1.Lines.Add('Created Date: '+AJSONObject.Get('createdDate').JsonValue.Value);
end;
Попытался переписать это на C++, оставив себе только нужные участки кода (мне не нужно узнавать, какого типа данные пришли, и всегда выполняется одна и та же функция), но безуспешно. Вот что у меня получилось:

Код:
TJSONObject* AJSONObject= new TJSONObject;
Console->Lines->Add("Равно ="+AJSONObject->Get("post_id")->JsonValue->Value());
При выполнении кода выпадает такая ошибка:

Цитата:
Access violation at address 5211A494 in module 'DbxCOmmonDriver190.bpl'. Read of address 0000000C.
Прочитал всё что можно. И справки, и в интернете искал. Надеюсь на вашу помощь. Заранее огромнейшее спасибо
Cruzel вне форума Ответить с цитированием
Старый 08.09.2014, 20:38   #2
Cruzel
Пользователь
 
Регистрация: 05.11.2011
Сообщений: 31
По умолчанию

Извиняюсь за то, что тут ахинею написал. Делал поначалу неправильно, поэтому всё и не получалось. Делается так (может кому пригодится, взято с другого форума):

Код:
TJSONObject *jObj = static_cast<TJSONObject*>(TJSONObject::ParseJSONValue(RESTResponse1->Content));
TJSONObject *jItem = static_cast<TJSONObject*>(jObj->Get("response")->JsonValue);
String code = jItem->Get("post_id")->JsonValue->Value();
Cruzel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение ответа сервера. Semreg Общие вопросы Delphi 1 01.12.2013 22:37
Запуск командной строки и получение ответа D][mon C# (си шарп) 2 30.05.2013 01:39
Отсылка интернет-запросов (с получение ответа) Adyvan ASP.NET 1 07.02.2013 17:24
О получение ответа AJAX Rost93 JavaScript, Ajax 11 16.05.2012 07:25
Получение цвета бордюра компонента t2skler Общие вопросы Delphi 6 19.02.2011 08:36