В данной статье мы рассмотрим, как можно работать с JSON-массивами в Delphi, используя встроенные компоненты для работы с JSON, а также рассмотрим типичные ошибки, с которыми могут столкнуться начинающие разработчики.
Проблема пользователя
Пользователь столкнулся с необходимостью извлечения данных из JSON-массива, полученного по URL, и последующего отображения этих данных в компонентах Memo или ListView. При выполнении кода, который должен был обработать JSON и вывести данные, ничего не происходит, несмотря на то, что код написан корректно использовать компоненты для работы с интернетом (TIdHTTP и TIdSSLIOHandlerSocketOpenSSL).
Пример кода пользователя
function GetURLAsString(const aurl: string): string;
...
procedure TForm4.Button1Click(Sender: TObject);
var
jsv: TJsonValue;
jsa: TJsonArray;
data: string;
i: integer;
LItem: TListViewItem;
begin
try
data := GetURLAsString('http://....');
except
on E: exception do
end;
try
jsv := TJSONObject.ParseJSONValue(data);
try
jsa := jsv as TJSONArray;
for I := 0 to jsa.Size - 1 do
begin
var jso := jsa.Get(i) as TJsonObject;
LItem := form4.ListView1.Items.Add;
LItem.Text := jso.GetValue('DATE').ToString;
end;
finally
jsv.Free;
end;
except
on E: exception do
end;
end;
Ошибка пользователя
Пользователь пытается использовать неинициализированный объект js для вызова метода AddPair, что приведет к ошибке доступа. Кроме того, в коде есть лишние операции, которые усложняют понимание и могут вызвать ошибки. Например, создание неиспользуемого массива jsa и добавление пары в объект js, который не используется.
Альтернативное решение
Для упрощения и исправления кода можно использовать следующий шаблон:
procedure TForm4.Button1Click(Sender: TObject);
var
jsv: TJsonValue;
jsa: TJSONArray;
data: string;
i: integer;
LItem: TListViewItem;
begin
data := GetURLAsString('http://....');
jsv := TJSONObject.ParseJSONValue(data, 0, jsa);
form4.ListView1.BeginUpdate;
try
for I := 0 to jsa.Count - 1 do
begin
var jso := jsa[I] as TJsonObject;
LItem := form4.ListView1.Items.Add;
LItem.Text := jso.GetValue('DATE').ToString;
// Добавьте другие значения из объекта, если это необходимо
end;
finally
form4.ListView1.EndUpdate;
end;
end;
Пошаговая инструкция
Инициализируйте переменную data с помощью вызова функции GetURLAsString, где передайте URL с JSON-данными.
Используйте метод TJSONObject.ParseJSONValue для преобразования строки data в объект TJSONArray, сохраните результат в переменной jsv.
Начните обновление компонента ListView перед добавлением элементов.
Пройдите по массиву jsa и для каждого элемента массива (каждый элемент JSON-массива является объектом TJsonObject) извлеките значение ключа DATE и добавьте его в ListView.
Завершите обновление компонента ListView.
Подсказки для разработчика
Убедитесь, что вы знаете основы отладки и используете их для поиска ошибок в коде.
Проверьте, что URL верный и JSON-структура не содержит ошибок.
Избегайте излишних операций и сложных конструкций, где это не требуется.
Заключение
Работа с JSON в Delphi не представляет сложности, если следовать правильному подходу и избегать излишнего усложнения кода. Использование встроенных компонентов для работы с JSON позволяет быстро и эффективно извлекать и отображать данные в интерфейсе пользователя.
Пользователь нуждается в инструкции по извлечению данных из JSON-массива для отображения в компонентах Memo и ListView в среде разработки Delphi, столкнувшись с проблемами при обработке JSON с использованием встроенных компонентов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.