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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2015, 16:11   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию JSON положить объект в объект

Добрый день, никогда не работал с JSON. Начинаю по тихому разбираться!

Мне нужно положить объект в объект. Нашёл такой пример.

Код:
{добавляем в объект ещё один объект}
  InnerObject:=TJSONObject.Create;
  InnerObject.AddPair('Inner_StringPair','Hello World!');
  JSONObject.AddPair(TJSONPair.Create('InnerObject',InnerObject));
Пробую у себя

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  jsObject, jsExObject: TJSONObject;
begin
  jsObject := TJSONObject.Create();
  jsExObject := TJSONObject.Create();
  try
    jsObject.AddPair('id', Format('%s', ['123']));
    //
    jsExObject.AddPair('scenid', TJSONNumber.Create(128));
    jsExObject.AddPair('user', TJSONNumber.Create(125));
    //
    jsObject.AddPair('exercise', jsExObject);
  finally
    FreeAndNil(jsObject);
    FreeAndNil(jsExObject);
  end;
  Memo1.Text := jsObject.ToString;
end;
выходит ошибка "Invalid point operation"

Подскажите что не так?

Нужна такая структура:

{
"id": "GUID клиента",
"exercise":
{
"scenid": 26,
"user": 1
}
}
Dozent вне форума Ответить с цитированием
Старый 27.03.2015, 16:38   #2
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

а почему не как в примере?
lomastr_ вне форума Ответить с цитированием
Старый 30.03.2015, 10:48   #3
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  jsObject, jsExObject: TJSONObject;
begin
  jsObject := TJSONObject.Create();
  jsExObject := TJSONObject.Create();
  try
    jsObject.AddPair('id', Format('%s', ['123']));
    //
    // jsExObject.AddPair('scenid', TJSONNumber.Create(128));
    // jsExObject.AddPair('user', TJSONNumber.Create(125));
    jsExObject.AddPair('user', '321');
    //
    jsObject.AddPair(TJSONPair.Create('exercise', jsExObject));
  finally
    FreeAndNil(jsObject);
    FreeAndNil(jsExObject);
  end;
  Memo1.Text := jsObject.ToString;
end;
Да та же ошибка!
Dozent вне форума Ответить с цитированием
Старый 30.03.2015, 11:25   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Закомментируй
Код:
FreeAndNil(jsExObject);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.03.2015, 11:29   #5
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

хм! Страно! Даже не подумал! Но помогло!
Dozent вне форума Ответить с цитированием
Старый 30.03.2015, 11:30   #6
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

А убивать тогда как правильно тут?
Dozent вне форума Ответить с цитированием
Старый 30.03.2015, 11:38   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

FreeAndNil(jsObject); убивает все вложенное
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.03.2015, 12:57   #8
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Код:
function TTransport.GetNetMessageToActionScenario(StateScenario: string; ScenarioID, UserID: integer): string;
var
  jsObject, jsExObject: TJSONObject;
begin
  Result := '';
  jsObject := TJSONObject.Create();
  jsExObject := TJSONObject.Create();
  try
    jsObject.AddPair('id', Format('%s', ['123']));
    //
    jsExObject.AddPair('scenid', TJSONNumber.Create(128));
    jsExObject.AddPair('user', TJSONNumber.Create(125));
    //
    jsObject.AddPair(TJSONPair.Create('exercise', jsExObject));
    Result := jsObject.ToString;
  finally
    FreeAndNil(jsObject);
  end;
end;
Dozent вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать так, чтобы при наведении мышкой на объект, который находится под другим, этот объект выходил на первый план? Zaza7 HTML и CSS 3 17.01.2013 10:23
Итерация через объект JSON в Javascript maomam Помощь студентам 0 03.11.2012 00:51
Как в JSON выразить объект? Utkin Общие вопросы по программированию, компьютерный форум 6 16.06.2012 00:01
Шаблоны - нужно создать объект класса abc в котором вместо aa использовался бы объект класса fff? Farrel Общие вопросы C/C++ 2 13.11.2010 17:37
добавить в объект объект. the_deer_one Общие вопросы C/C++ 7 10.09.2010 12:17