Перейти к содержанию
  • Регистрация
  • 0
x11

Проверить существование TJSONObject

Вопрос

Создаем TJSONObject
 

innerObject := TJSONObject(TJSONObject.ParseJSONValue('здесь неправильный json'));


Почему потом Assigned(innerObject) возвращает True?

Просто позже строка:

s := innerObject.ToString;


вызывает AV

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

Да нормально работает на XE8 и 10.3

procedure TForm6.Button1Click(Sender: TObject);
var A: TJSONObject;
begin
  A := TJSONObject(TJSONObject.ParseJSONValue('здесь неправильный json'));
  if Assigned(A) then
    A.ToString;
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Не делайте слепое приведение типов...
 

var JObj:TJSONObject;
begin
  JObj:=TJSONObject(TJSONObject.ParseJSONValue('0'));
  try
    try
      if assigned(JObj) then
        JObj.AddPair('Access','violation');
    except
      ShowMessage('Surprise MF!: '+JObj.ClassName);
    end;
  finally
    JObj.Free;
  end;
end;

ParseJSONValue возвращает TJSONValue, и необходима или проверка типа или использование только в рамках TJSONValue чего в большинстве случаев вполне достаточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

В общем, да. Я изначально просто был не прав.

Вот так правильно:

var
  JSONValue: TJSONValue;
  innerObject: TJSONObject;
begin
...

....

      JSONValue := TJSONObject.ParseJSONValue(.....);

      if not (JSONValue is TJSONObject) then
        Continue
      else
        innerObject := JSONValue as TJSONObject;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...