JSON (JavaScript Object Notation) — это легковесный формат обмена данными, который легко читается как людьми, так и компьютерами. В мире разработки под Delphi, который использует Object Pascal, работа с JSON может быть непривычной, если вы не знакомы с основами. В данной статье рассмотрим, как правильно обращаться с JSON массивами в Delphi, используя пример, предложенный Marcel.
Проблема
При работе с JSON массивами в Delphi может возникнуть ошибка доступа, если вы попытаетесь использовать свойство Count объекта TJSONArray в цикле for без предварительной обработки JSON. Это происходит из-за того, что сам массив еще не инициализирован на момент попытки обращения к свойству Count.
Решение
Для корректного разбора JSON массива необходимо выполнить следующие шаги:
Инициализировать объект TJSONValue, используя статический метод ParseJSONValue класса TJSONObject, и передать ему строку с JSON.
Проверить, что результат парсинга не равен nil, что означает успешный парсинг JSON.
Привести результат к типу TJSONArray.
Использовать свойство Count полученного массива для итерации по элементам в цикле for.
Пример кода
var
JsonValue: TJSONValue;
JsonArray: TJSONArray;
JsonObject: TJSonObject;
id, name, description, sku, price: string;
i, j: integer;
begin
JsonValue := TJSONObject.ParseJSONValue(Memo1.Text); // Шаг 1
if Assigned(JsonValue) then
try
JsonArray := JsonValue as TJSONArray; // Шаг 3
j := 1;
for i := 0 to JsonArray.Count-1 do // Используем свойство Count
begin
JsonObject := JsonArray.Items[i] as TJSonObject;
id := JsonObject.GetValue('id').Value;
sku := JsonObject.GetValue('sku').Value;
description := JsonObject.GetValue('description').Value;
name := JsonObject.GetValue('name').Value;
price := JsonObject.GetValue('price').Value;
// Здесь код для обработки значений, например, вывод в StringGrid
StringGrid1.Cells[1, j] := sku;
StringGrid1.Cells[2, j] := name;
StringGrid1.Cells[3, j] := price;
StringGrid1.Cells[4, j] := description;
Inc(j);
end;
finally
JsonValue.Free; // Освобождение памяти
end;
end;
Альтернативное решение
Если вы хотите избежать утечек памяти, всегда освобождайте ресурсы, которые вы выделили. В приведенном выше примере, после завершения работы с JsonValue, вызов JsonValue.Free гарантирует освобождение памяти.
Заключение
При работе с JSON массивами в Delphi ключевым моментом является предварительная обработка JSON перед началом итерации по массиву. Это позволит избежать ошибок доступа и гарантирует корректное получение количества элементов в массиве.
Разбор JSON массива в Delphi, включая инициализацию, проверку и итерацию по элементам, с учетом возможных ошибок доступа.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS