JSON (JavaScript Object Notation) — это легковесный формат обмена данными, который легко читается как человеком, так и машиной. В контексте разработки на Delphi, работы с JSON массивами часто требуется для интеграции с веб-сервисами или при миграции данных между различными источниками.
Проблема
Рассмотрим JSON объект, который содержит вложенный массив объектов. Нам необходимо обработать каждый объект в массиве отдельно, чтобы в дальнейшем вставить его данные в SQL базу.
Для начала необходимо корректно извлечь JSON массив из исходного объекта. В примере кода, предоставленном в вопросе, пользователь столкнулся с проблемой, что размер массива был некорректен, что указывало на ошибку в типизации. Исправление заключалось в проверке типа значения, которое пользователь пытался интерпретировать как массив, используя оператор as для безопасного приведения типов.
jArray := jPair.JsonValue as TJSONArray;
Если приведение типов не удается, происходит исключение EInvalidCast, что указывает на то, что значение не является TJSONArray. В данном случае, значение действительно было строкой, содержащей JSON данные. Для корректного парсинга необходимо использовать метод TJSONObject.ParseJSONValue.
jArray := TJSONObject.ParseJSONValue((jPair.JsonValue as TJSONString).Value) as TJSONArray;
Пример кода
Далее, приведем пример кода, который демонстрирует, как обработать JSON массив и вывести его содержимое:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, dbxjson;
const JSON_DATA = '{"ArrayData":[{...}]}'; // Полный JSON объект
var
jsv, jsValue: TJsonValue;
originalObject, jso: TJsonObject;
jsPair, jsArr: TJsonPair, TJsonArray;
i: Integer;
begin
try
// Парсинг JSON строки
jsv := TJSONObject.ParseJSONValue(JSON_DATA);
try
originalObject := jsv as TJsonObject;
jsPair := originalObject.Get('ArrayData');
jsArr := jsPair.JsonValue as TJSONArray;
writeln('Размер массива: ', jsArr.Size);
for i := 0 to jsArr.Size - 1 do begin
jso := jsArr.Get(i) as TJsonObject;
for jsPair in jso do
writeln(jsPair.JsonString.Value, ': ', jsPair.JsonValue.Value);
end;
finally
jsv.Free;
Readln;
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Интеграция с SQL базой
После обработки данных из JSON массива, их можно вставить в SQL базу. Для этого необходимо определить соответствующую схему таблицы, которая соответствует полям JSON объектов, и использовать SQL команды для вставки данных.
Заключение
В данной статье мы рассмотрели, как работать с JSON массивами в Delphi, используя компоненты из пакета dbxjson. Мы научились извлекать данные из JSON массива и подготовили их для дальнейшей работы с SQL базами данных. Это базовые знания, которые пригодятся при работе с веб-сервисами и интеграции данных.
Обсуждается процесс обработки JSON массива для последующей вставки данных в SQL базу с использованием языка программирования Delphi и подробно рассматривается пример кода для этой задачи.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS