Size: a a a

2020 October 03

V

Vasiliy in Delphi & Lazarus
Шляпник
🤷‍♂️ минздрав, скорее всего, требуе там порой такие затейники сидят творческие :)) поэтому как у программистов водится, сказали надо - делаем :)
Роспотреб требует, да и я, не программист а просто инженер пищевого производства ))
Делфи-хобби так сказать было. Вот и решил кандидатскую свою по этому поводу и писать. И сделал чудо, сейчас его и допиливать приходится
источник

AK

Andy Korg in Delphi & Lazarus
Vasiliy
Блин, да вроде все просто, но как это в телефон переложить... Хз
источник
2020 October 05

М

МихаИл in Delphi & Lazarus
Добрый день, коллеги!
и вновь обращаюсь с вопросом.
проблема следующая:
разгребаю json и его кусок выгребаю этим кодом:
fuel_begin_i:= (v_proff_i.GetValue('fuel_begin') as TJSONString).Value;
fuel_end_i:= (v_proff_i.GetValue('fuel_end') as TJSONString).Value;
но

бывает иногда то приходит пустое поле и мне выдает ошибку
(см скрин)
источник

М

МихаИл in Delphi & Lazarus
чем можно одолеть сей недуг?
источник

AK

Alexey Kulakov in Delphi & Lazarus
проверять на nil или в try-except засовывать?
источник

AK

Alexey Kulakov in Delphi & Lazarus
получается же, что ты nil преобразуешь в класс, для которого запрашиваешь ещё свойство класса
источник

М

МихаИл in Delphi & Lazarus
я так и понял, а как проверять на nil?
источник

AK

Alexey Kulakov in Delphi & Lazarus
ну, что-то типа
lptr:=v_proff_i.GetValue('fuel_begin');
if lptr<>nil then
fuel_begin_i:= (lptr as TJSONString).Value
else
fuel_begin_i:= '';
источник

AK

Alexey Kulakov in Delphi & Lazarus
наверное, такого типа. или аналогично
источник

М

МихаИл in Delphi & Lazarus
ок, спасибо, пробую
источник

VA

Viktor Akselrod in Delphi & Lazarus
МихаИл
Добрый день, коллеги!
и вновь обращаюсь с вопросом.
проблема следующая:
разгребаю json и его кусок выгребаю этим кодом:
fuel_begin_i:= (v_proff_i.GetValue('fuel_begin') as TJSONString).Value;
fuel_end_i:= (v_proff_i.GetValue('fuel_end') as TJSONString).Value;
но

бывает иногда то приходит пустое поле и мне выдает ошибку
(см скрин)
источник

AK

Alexey Kulakov in Delphi & Lazarus
вот, тоже решение
источник

Ш

Шляпник in Delphi & Lazarus
угу, только надо продумать ответ программы на ненахождение значения, так как это может быть признаком расхождения версий структур между сервисом и принимающей стороной
источник

М

МихаИл in Delphi & Lazarus
Alexey Kulakov
ну, что-то типа
lptr:=v_proff_i.GetValue('fuel_begin');
if lptr<>nil then
fuel_begin_i:= (lptr as TJSONString).Value
else
fuel_begin_i:= '';
а какой тип переменной у
lptr
?
источник

VA

Viktor Akselrod in Delphi & Lazarus
МихаИл
а какой тип переменной у
lptr
?
смотри выше ссылку на нормальное стандартное решение без промежуточных переменных
источник

М

МихаИл in Delphi & Lazarus
Alexey Kulakov
ну, что-то типа
lptr:=v_proff_i.GetValue('fuel_begin');
if lptr<>nil then
fuel_begin_i:= (lptr as TJSONString).Value
else
fuel_begin_i:= '';
попробовал твое предложение
str111:=v_proff_i.GetValue('fuel_begin');
                           if str111<>nil then
                           fuel_begin_i:= (str111 as TJSONString).Value
                           else
                           fuel_begin_i:= '';
источник

М

МихаИл in Delphi & Lazarus
ругается на это
источник

AK

Alexey Kulakov in Delphi & Lazarus
ну, тебе и попроще предлагали :) в одну строку (это я люблю вручную контролировать некоторые вещи)
источник

AK

Alexey Kulakov in Delphi & Lazarus
ну, пишет же, что ты пытаешься переменную преобразовать в класс, к которому она не относится
источник

AK

Alexey Kulakov in Delphi & Lazarus
можно принудить, конечно, если не (str111 as TJSONString)  писать, а TJSONString(str111).Value, но это всё равно не совсем правильно будет
источник