x11 Опубликовано 17 мая, 2019 Поделиться Опубликовано 17 мая, 2019 Создаем TJSONObject innerObject := TJSONObject(TJSONObject.ParseJSONValue('здесь неправильный json')); Почему потом Assigned(innerObject) возвращает True? Просто позже строка: s := innerObject.ToString; вызывает AV Цитата Ссылка на комментарий
0 slav_z Опубликовано 18 мая, 2019 Поделиться Опубликовано 18 мая, 2019 Да нормально работает на XE8 и 10.3 procedure TForm6.Button1Click(Sender: TObject); var A: TJSONObject; begin A := TJSONObject(TJSONObject.ParseJSONValue('здесь неправильный json')); if Assigned(A) then A.ToString; end; Евгений Корепов 1 Цитата Ссылка на комментарий
0 x11 Опубликовано 19 мая, 2019 Автор Поделиться Опубликовано 19 мая, 2019 нет Цитата Ссылка на комментарий
0 Slym Опубликовано 20 мая, 2019 Поделиться Опубликовано 20 мая, 2019 Не делайте слепое приведение типов... 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 чего в большинстве случаев вполне достаточно. x11 1 Цитата Ссылка на комментарий
0 x11 Опубликовано 20 мая, 2019 Автор Поделиться Опубликовано 20 мая, 2019 В общем, да. Я изначально просто был не прав. Вот так правильно: var JSONValue: TJSONValue; innerObject: TJSONObject; begin ... .... JSONValue := TJSONObject.ParseJSONValue(.....); if not (JSONValue is TJSONObject) then Continue else innerObject := JSONValue as TJSONObject; Евгений Корепов 1 Цитата Ссылка на комментарий
Вопрос
x11
Создаем TJSONObject
innerObject := TJSONObject(TJSONObject.ParseJSONValue('здесь неправильный json'));
Почему потом Assigned(innerObject) возвращает True?
Просто позже строка:
s := innerObject.ToString;
вызывает AV
Ссылка на комментарий
4 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.